python - Django 复选框问题

标签 python django checkbox view django-templates

您好,我有一个显示项目列表的模板表单。该模板称为 edit_order.html。我希望能够从另一个项目列表中添加新项目。另一个项目列表中有一个名为 items.html 的模板,显示项目列表。在 items.html 中,每个项目除了一个项目之外还有一个复选框。现在,我想做的是仅当该项目已在 edit_order 模板中列出时才标记一个复选框。现在,所有项目都已标记。但我不想要这个。

编辑订单.html

 {% for item in items %}
                <tr>
                <td><input type="checkbox" name="item" value="{{item.pk}}" checked="checked"></td>
                <td>{{item.tiptop_id}}</td><td>{{item.alternative_id}}</td><td>{{item.title}}</td>
                <td>{{item.type}}</td><td>{{item.format}}</td>

                </tr>
            {% endfor %}

项目.html

 {% extends "base_menu.html" %}
    {%block script%}
    <script type="text/javascript">
            $(function(){
                    $("#check_all").click(function(){
                            if(this.checked ==true)
                                            $("tbody :checkbox").each(function(){
                                                    this.checked=true;
                                            });
                                    else
                                            $("tbody :checkbox").each(function(){
                                                    this.checked=false;
                                            });
                    });
            });
    </script>
    {%endblock%}


    <td><a href="{% url tiptop.views.edit_item item.client.pk item.pk %}" onclick="return showAddAnotherPopup(this);">Edit</a></td>
        </tr>
{% endfor %}
</tbody>
</table></fieldset>
</div>
<div id="form_footer">
                <input type="submit" value="Request Delivery" onclick="change_action('{% url tiptop.views.service_order client.pk 1 %}')">
                <input type="submit" value="Request Pick Up" onclick="change_action('{% url tiptop.views.service_order client.pk 2 %}');validate_status(this.form)">
        </div>


</form>
{% endblock %}

        {% block right_content %}
        <div id="location_header">{{client}}: Search results</div>
        <form action="{% url tiptop.views.service_order client.pk 1 %}" method="post" onsubmit="return validate_selection(this)">
        <div class="form_container">
    <fieldset class="model">
    <table id="items_table">
            <thead>
            <tr>
                    <th><input type="checkbox" id="check_all" checked="checked"></th>
                    <th scope="col">Tiptop no.</th><th scope="col">Client no.</th><th scope="col">Title</th><th scope="col">Type</th>
                    <th scope="col">Format</th><th scope="col">Status</th><th scope="col">Date</th>
            </tr>
            </thead>
            <tbody>
    {% for item in items %}
            <tr class="items_table_row">
                    <td><input type="checkbox" name="{{item.pk}}" value="{{item.pk}}" checked="checked"></td>
                    <td>{{item.tiptop_id}}</td><td>{{item.alternative_id}}</td><td>{{item.title}}</td><td>{{item.type}}</td><td>{{item.format}}</td>
                    <td><span id="{{item.pk}}" name="type">{{item.itemstatushistory_set.latest}}</span></td><td>{{item.itemstatushistory_set.latest.date.date|date:"d M Y"}}</td>

最佳答案

我对你想要做什么有点困惑。但是,如果可能的话,我建议您使用 Django 附带的表单库,而不是在模板中手动渲染一堆表单元素。下面是一个简单表单的示例,其中自定义/动态选项呈现为复选框。

>>> class CheckboxForm(forms.Form):
...     items = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple)
... 
>>> choices = (('item-1', 'This is item 1'), ('item-2', 'This is item 2'), ('item-3', 'This is item 3'))
>>> form = CheckboxForm(initial={'items':('item-2',)})
>>> form.fields['items'].choices = choices

>>> print form['items']
<ul>
<li><label for="id_items_0"><input type="checkbox" name="items" value="item-1" id="id_items_0" /> This is item 1</label></li>
<li><label for="id_items_1"><input checked="checked" type="checkbox" name="items" value="item-2" id="id_items_1" /> This is item 2</label></li>
<li><label for="id_items_2"><input type="checkbox" name="items" value="item-3" id="id_items_2" /> This is item 3</label></li>
</ul>
>>> 

请注意,给予表单构造函数的“initial”kwarg 有一个“items”字段的键,该字段应该是默认情况下要检查的元素 ID 的可迭代对象。您可以看到“item-2”被指定为“items”字段的“初始”值,并且在生成的 HTML 显示中,“item-2”被选中。因此,通过自定义此“初始”参数,您可以指定最初在页面上检查哪些项目。

如果您使用Django表单,您还可以轻松验证提交的表单数据。将表单绑定(bind)到输入数据时,无需指定表单“初始”,因为最初选择的项目并不重要。

# valid submission
>>> form = CheckboxForm({'items':('item-2',)})
>>> form.fields['items'].choices = choices
>>> print form.is_valid()
True
>>> print form.cleaned_data
{'items': [u'item-2']}

# invalid submission, 'item-4' does not exist in the field choices
>>> form = CheckboxForm({'items':('item-4',)})
>>> print form.is_valid()
False

注意:您还可以在表单上设置自定义构造函数并将选项传递到其中,而不是在创建表单后设置 field.choices。

关于python - Django 复选框问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4850748/

相关文章:

python - 在 Django 中如何安排每日报告以电子邮件形式发送

javascript - 禁用单选按钮单击上的复选框

asp.net - 检查分散在同一页面上的复选框

python - pandas - 使用元素的计数和频率创建数据框

python - 如何在 Django 模板中获取我网站的域名?

django - DPI-1047 "libclntsh"无法打开共享对象文件 : No such file or directory"

php - 将复选框值发布到 php 文件

Python/Pandas –– ParserError : Error tokenizing data. C 错误 : Expected x fields in line i, 看到 y

python - 如何将未指定数量的参数传递给 lambda? (Python)

python - use_required_attribute() 缺少 1 个必需的位置参数 : 'initial' django forms