Django表格空白=假

时间:2016-02-22 02:03:29

标签: django forms validation

目前,如果需要某个字段,可以通过blank = False参数强制执行此操作,例如:

models.py

address1 = models.CharField(max_length=255,null=False,blank=False)

但是,验证是在POST操作之前执行的,在尝试提交包含空字段的表单时会产生类似的结果:

Example 1

我希望在后期步骤中完成验证,如下所示:

models.py

address1 = models.CharField(max_length=255,null=False,blank=true)

forms.py

class AddressForm(forms.ModelForm):
    def __init__(self,*args,**kwargs):
        super(AddressForm,self).__init__(*args,**kwargs)
        self.fields['address1'].required = True

当尝试提交包含空字段的表单时,这会产生以下结果:

Example 2

但是这个问题(据我所知)是我需要根据具体情况明确说明每个字段的required属性。

有什么方法可以将blank=Falserequired=True属性相关联,抑制第一个表单验证(上面),而不是第二个?

1 个答案:

答案 0 :(得分:1)

ModelForm运行表单验证,然后运行模型验证:

  

验证ModelForm有两个主要步骤:

     

验证表格

     

验证模型实例

因此,您必须在继承的模型验证之前手动添加所需的额外表单验证。 但是,已经需要空白字段的默认ModelForm字段:

  

如果模型字段为空= True,则将required设置为False   表格字段。否则,required = True

您可以更改错误消息。如果你经常使用这些额外的验证,你可以使用Mixin:

class BlankToRequiredMixin(object):
   def set_required(self):      
      model = self._meta.model
      for field_name,form_field in self.fields.iteritems():
          if not model._meta.get_field(field_name).blank:
              form_field.error_messages={'required': 'This field is required'} # to make it required in addtion to non-blank set .required=True

然后,为模型中非空白的所有字段设置required=True

class AddressForm(forms.ModelForm,BlankToRequiredMixin):
    def __init__(self,*args,**kwargs):
        super(AddressForm,self).__init__(*args,**kwargs)
        self.set_required()

以类似的方式,您可以根据模型验证属性向表单字段添加其他验证。对于外观,更改窗口小部件并在mixin中设置字段窗口小部件。