目前,如果需要某个字段,可以通过blank = False参数强制执行此操作,例如:
models.py
address1 = models.CharField(max_length=255,null=False,blank=False)
但是,验证是在POST操作之前执行的,在尝试提交包含空字段的表单时会产生类似的结果:
我希望在后期步骤中完成验证,如下所示:
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
当尝试提交包含空字段的表单时,这会产生以下结果:
但是这个问题(据我所知)是我需要根据具体情况明确说明每个字段的required
属性。
有什么方法可以将blank=False
与required=True
属性相关联,抑制第一个表单验证(上面),而不是第二个?
答案 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中设置字段窗口小部件。