即使将字段设置为null并为空,也不能将字段保持为空

时间:2017-08-24 10:58:20

标签: python django django-forms

型号:

class Member( models.Model ):

    model_categories = models.CharField(
            max_length = 255,
            null = True,
            blank = True )

形式:

class MemberForm( forms.ModelForm ):

    MODEL_CATEGORIES = (
        ('advisor', 'advisor'),
        ('member', 'member'),
        ('admin', 'admin'),
    )


    model_categories = forms.MultipleChoiceField(
            widget = forms.CheckboxSelectMultiple,
            choices = MODEL_CATEGORIES
    )

    class Meta:
        model = Member
        fields = [ 'model_categories' ]

当我提交表单时,仍需要无法选中框的model_categories字段。是什么原因?

2 个答案:

答案 0 :(得分:1)

默认情况下,django表单中的字段为required=True。在表单字段定义中设置required=False

model_categories = forms.MultipleChoiceField(
            widget = forms.CheckboxSelectMultiple,
            choices = MODEL_CATEGORIES,
            required=False
    )

更多:

模型中的

blank=True决定了天气可能是空白还是不在表格中。

,通过在MemberForm

中定义字段
model_categories = forms.MultipleChoiceField(
        widget = forms.CheckboxSelectMultiple,
        choices = MODEL_CATEGORIES

您使用新的字段定义中的默认属性ModelForm来覆盖False字段,其中requried属性由模型blank=True设置required=True

答案 1 :(得分:0)

来自docs

  

Field.required¶   默认情况下,每个Field类都假定该值是必需的,因此如果传递一个空值 - None或空字符串(“”) - 那么clean()将引发ValidationError异常:

所以你必须为你的字段设置所需的错误

model_categories = forms.MultipleChoiceField(required=False,
            widget = forms.CheckboxSelectMultiple,
            choices = MODEL_CATEGORIES
    )