我的Models.py文件中有这个模型。我想比较“start_date”和“end_date”,以便start_date值永远不会大于end_date或者反之亦然。我如何进行此验证?
class Completion(models.Model):
start_date = models.DateField()
end_date = models.DateField()
batch = models.ForeignKey(Batch)
topic = models.ForeignKey(Topic)
答案 0 :(得分:8)
我开始进入模型验证框架。 HTTP:https://docs.djangoproject.com/en/2.0/ref/models/instances/#django.db.models.Model.clean
它被ModelForms
使用,并且开始使用它非常有意义。
基本上,您在模型中定义clean()
方法,放入验证逻辑,如果失败则引发ValidationError
。
class MyModel(models.Model):
def clean(self):
from django.core.exceptions import ValidationError
if self.start_data > self.end_date:
raise ValidationError('Start date cannot precede end date')
def save(self, *args, **kwargs):
# you can have regular model instance saves use this as well
super(MyModel, self).save(*args, **kwargs)
此处的好处是,任何ModelForm
(这意味着管理员网站将会调用full_clean()
,而clean()
会调用您的模型save_model
而无需任何额外的工作
无需覆盖try:
my_model.full_clean()
except ValidationError, e:
# Do something based on the errors contained in e.message_dict.
# Display them to a user, or handle them programatically.
,您将在管理表单顶部获得常见的验证错误。
最后,它非常方便。你可以在任何地方使用它。
{{1}}