我有几个字段的ModelForm。有些字段是必填的,有些则不是。此外,我有不同的选择选择字段,我想使一些字段“必填”或不基于这个选择字段的选择。
我尝试了表单的clean()方法
def clean(self):
cleaned_data = self.cleaned_data
some_field = cleaned_data.get("some_field")
if some_field == 'some_value':
self.fields['other_field'].required = False
return cleaned_data但它不起作用
发布于 2011-08-17 21:51:34
请参阅Cleaning and validating fields that depend on each other上的Django文档。标准做法是改为执行以下处理:
def clean(self):
cleaned_data = self.cleaned_data
some_field = cleaned_data.get("some_field")
if some_field == 'some_value':
# 'other_field' is conditionally required.
if not cleaned_data['other_field']:
raise forms.ValidationError("'Other_field' is required.")
return cleaned_data发布于 2011-08-17 21:33:52
您的想法是正确的,但问题是,在清除表单之前,各个字段验证已经运行。你有几个选择。您可以将该字段设置为非必填字段,并处理form.clean中何时需要该字段的逻辑。或者,您可以将该字段保留为必填字段,并删除它可能在clean中引发的验证错误。
def clean(self):
cleaned_data = self.cleaned_data
some_field = cleaned_data.get("some_field")
if some_field == 'some_value':
if 'other_field' in self.errors:
del self.errors['other_field']
cleaned_data['other_field'] = None
return cleaned_data这有一些问题,因为它删除了所有错误,而不仅仅是缺少/必需的错误。cleaned_data也有一个问题。您现在有了一个必填字段,该字段不在cleaned_data中,这就是我将其添加为None的原因。应用程序的其余部分将不得不处理这种情况。有一个没有值的必填字段可能看起来很奇怪。
发布于 2012-07-19 22:36:59
如果您想以常用方式打印必填字段的错误信息,您可以这样做:
def clean(self):
cleaned_data = super(PasswordChangeForm, self).clean()
token = cleaned_data.get('token')
old_password = cleaned_data.get('old_password')
if not token and not old_password:
self._errors['old_password'] = self.error_class([self.fields['old_password'].error_messages['required']])https://stackoverflow.com/questions/7092536
复制相似问题