如何在复选框中保存标记?

时间:2017-05-03 03:23:51

标签: python django python-3.x django-forms django-1.10

有人可以说,如何在Django中创建如下图所示的形式?

enter image description here

我的模型Product包含字段is_visable。在表单中,我想显示所有带有字段is_visable的产品。用户可以选中复选框并更改is_visable字段的值。换句话说,使产品可见或不可见。我的形式是关于MultipleChoiceField的事情但不确定在我的情况下是否正确。

models.py:

class Product(models.Model):
    symbol = models.CharField(_('Symbol'), max_length=250)
    name = models.CharField(_('Name'), max_length=250)
    is_visible = models.BooleanField(default=False)

forms.py:

class ProductForm(forms.ModelForm):
    product = forms.ModelChoiceField(widget=forms.CheckboxSelectMultiple, queryset=Product.objects.all())

views.py:

if request.method == 'POST':
    form = ProductForm(data=request.POST)
    if form.is_valid():
        ids = form.cleaned_data.get('product')  # Example: ['pk', 'pk']
        for id in ids:
            product = Product.objects.get(pk=id)
            product.is_visible = True
            product.save()

1 个答案:

答案 0 :(得分:0)

我认为您要使用的是表单中ModelChoiceField CheckboxSelectMultiple,其小部件为Django ChoiceField populated from database values

ModelChoiceField的查询集是必需参数,因此您可以像这样构建查询集:

visible_products =  Product.objects.filter(is_visible=True)
product_field = forms.ModelChoiceField(queryset=visible_products,
                                 widget=CheckboxSelectMultiple()

有关详细信息,请参阅此帖:

{{3}}