有人可以说,如何在Django中创建如下图所示的形式?
我的模型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()
答案 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}}