在子类化db.models.Model
的同时,有时必须添加额外的判断/约束.
我有一台Event
型的,start_date
号和end_date
号的.
我想将验证添加到字段或模型中,以便end_date > start_date
.
有多少种可能的方法可以做到这一点?
至少我知道这可以在ModelForm
验证内的models.Model
之外完成.
但是如何连接到字段和models.Model
?
在子类化db.models.Model
的同时,有时必须添加额外的判断/约束.
我有一台Event
型的,start_date
号和end_date
号的.
我想将验证添加到字段或模型中,以便end_date > start_date
.
有多少种可能的方法可以做到这一点?
至少我知道这可以在ModelForm
验证内的models.Model
之外完成.
但是如何连接到字段和models.Model
?
我不会在save方法中放置这样的约束,太晚了.在那里引发异常对以错误方式输入数据的用户没有帮助,因为它将以500结束,并且用户将不会得到包含错误的表单,依此类推.
您真的应该在Forms/ModelForms清理方法中判断这一点,并引发ValidationError,因此form.is_valid()
返回False,您可以将表单中的错误发送回用户进行更正.
还要注意的是,从1.2版开始,Django已经有了Model Validation个版本.
它看起来像这样:
class Foo(models.Model):
# ... model stuff...
def clean(self):
if self.start_date > self.end_date:
raise ValidationError('Start date is after end date')