布尔字段字段必须始终为true的形式。 Django的

时间:2019-02-21 19:25:12

标签: django forms

我正在尝试添加一个限制,以便用户始终将复选框选中为“ True”。看起来像这样,但不幸的是它无法正常工作。任何帮助将不胜感激。

models.py

class OrderingMassage(models.Model):
    website_rules = models.BooleanField(default=None, blank=True)

forms.py

class OrderingMassageForm(forms.ModelForm):
    class Meta:
        model = OrderingMassage
        fields = ('website_rules')

    def clean_website_rules(self):
        data = self.cleaned_data['website_rules']
        if data == None:
            raise forms.ValidationError("please accept the rules of the website")
        else:
            return data

1 个答案:

答案 0 :(得分:2)

如果始终(应该)为真,则不应首先使用Model。模型存储数据。但是,如果所有记录都具有相同的记录,则没有太多数据。如果某列始终为True,那么该列的用途是什么?

您遇到的第二个问题是BooleanField [Django-doc](在表单字段中)将产生False作为“空值。因此检查真实性可能更Python化,例如:

class OrderingMassageForm(forms.Form):
    website_rules = forms.BooleanField(label='I accept the rules of the website.')

    def clean_website_rules(self):
        data = self.cleaned_data['website_rules']
        if not data:
            raise forms.ValidationError("please accept the rules of the website")
        else:
            return data

因此,您不需要需要调用该表格的.save()。但是.is_valid(..)会验证表单,因此会出现错误。