python - django 的多对多字段使用 CheckboxSelectMultiple 表单展示,如何判当前值是选中的
迷茫
迷茫 2017-04-18 10:25:40
0
0
433

一个 order 有多个 project,展示 order 的时候将 project 以 <input type="checkbox"> 的形式展示出来,进入某个 order 页面时,需要把这个 order 的 project 以 checkbox 的形式展示出来,不知道应该如何判断 project 在 order 里?(见文末的 start.html 文件)

models.py

class Project(models.Model):
    name = models.CharField(max_length=64, verbose_name='名称')
    description = models.CharField(max_length=256, blank=True, verbose_name='描述')
    

class Order(models.Model):
    project = models.ManyToManyField(Project, verbose_name='项目')

forms.py

class OrderForm(forms.Form):
    project = forms.ModelMultipleChoiceField(label='项目',
                                             widget=forms.CheckboxSelectMultiple,
                                             queryset=Project.objects.filter(enable=True))

views.py

def order_start(request, order_id):
    order = get_object_or_404(Order, pk=order_id)
    form = OrderForm(request.POST)
    if form.is_valid():
        ...
        order.save()
    else:
        form = OrderForm()

    return render(request, 'orders/start.html', {'form': form, 'order': order})

start.html

{% for p in form.project %}
<label for="{{ p.id_for_label }}">
    <input type="checkbox" name="{{ p.name }}" id="{{ p.id_for_label }}"
            value="{{ p.choice_value }}"
            {% if ???这里该如何判断呢??? %}checked{% endif %}
        >
    <p>{{ p.choice_label }}</p>
</label>
{% endfor %}
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

répondre à tous(0)
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!