我想在我的模型clean()方法中更改字段的“required”属性。
这是我的模特:
class SomeModel(models.Model):
type = models.CharField()
attr1 = models.ForeignKey(Attr1, blank=True, null=True)
attrs2 = models.ForeignKey(Attr2, blank=True, null=True)
现在我通过在视图中添加一个新参数在我的ModelForm __init__
中执行此操作。
它动态设置字段所需。
我的模特能否实现同样的目标?我正在使用django-rest-framework for API(它正在使用ModelForm),因此full_clean()
(包括clean_fields()
和clean()
)将会运行。
如果type以某个字符串开头,我想要attr1 / attr2字段。
我知道我可以在Model.clean()
进行此检查,但它会落入NON_FIELD_ERRORS
。
def clean(self):
if self.type.startswith("somestring"):
if self.attr1 is None and self.attr2 is None:
raise ValidationError("attr1 and attr2 are required..")
我宁愿看到这些错误附加到attr1和attr2字段错误,只需要“此字段是必需的”(标准的“必需”django错误)。
答案 0 :(得分:0)
这是一个适合我的代码示例:
def clean(self):
is_current = self.cleaned_data.get('is_current',False)
if not is_current:
start_date = self.cleaned_data.get('start_date', False)
end_date = self.cleaned_data.get('end_date', False)
if start_date and end_date and start_date >= end_date:
self._errors['start_date'] = ValidationError(_('Start date should be before end date.')).messages
else:
self.cleaned_data['end_date']=None
return self.cleaned_data