【问题标题】:How save marks in checkboxs?如何在复选框中保存标记?
【发布时间】:2017-09-30 17:22:11
【问题描述】:

有人可以说,如何在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()

【问题讨论】:

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


    【解决方案1】:

    我认为您要在表单中使用ModelChoiceField,并带有CheckboxSelectMultiple 的小部件。

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

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

    查看这篇文章了解更多详情:

    Django ChoiceField populated from database values

    【讨论】:

    • 您好!你能再看看我的帖子吗?我添加表单并查看代码。我以表格形式显示所有产品,然后更改用户在视图中单击的产品的 is_visable 值。但是我偷了不明白如何在具有'is_visable = True'的产品中的复选框中保存标记?你对此有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    相关资源
    最近更新 更多