【问题标题】:Multiple Choice Django Checkbox Form Validation多项选择 Django 复选框表单验证
【发布时间】:2016-03-22 18:19:45
【问题描述】:

我有一个带有 favourite_trees 字段的表单,我希望它的 3 个选项显示为复选框。然后,我希望用户能够选中 0 到 3 个复选框,并保存这些结果。但是,当我尝试保存表单时,favourite_trees 字段只是保存为空列表。其他字段保存正确。如何修复它以便选中的复选框可以保存?

forms.py

class TreesForm(forms.models.ModelForm):
    favourite_trees = forms.MultipleChoiceField(choices=TreePreference.TREE_CHOICES,
        widget=forms.CheckboxSelectMultiple())
    class Meta:
        model = TreePreference
        fields = (
                'tree_knowledge',
                'tree_type',)
        widgets = {
            'tree_type': forms.HiddenInput(),
        }

models.py

class TreePreference(models.Model):
    TREE_CHOICES = ('red_trees',
                    'blue_trees',
                    'purple_trees',
                   )
    tree_knowledge = model.CharField(blank=True, max_length=10)
    tree_type = model.CharField(blank=True, max_length=20)
    favourite_trees = models.CharField(choices=TREE_CHOICES, max_length=50, blank=True)

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    还有一个包django-multiselectfield 可以帮助您存储不需要单独模型的多个(字符串)值。

    【讨论】:

      【解决方案2】:

      因为你的favourite_trees字段是CharFieldchoices,所以它只将TREE_CHOICES中的一种树存储为字符串,你不能直接使用MultipleChoiceField来保存它。您应该使用创建一个名为 TreeChoice 之类的单独模型,然后将字段 favourite_trees 更改为指向该模型的 ManyToManyField

      【讨论】:

        猜你喜欢
        • 2014-12-10
        • 2016-07-09
        • 2011-02-13
        • 2022-07-02
        • 2011-08-10
        • 1970-01-01
        • 2012-05-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多