我想确保模型中的整数字段永远不会低于某个数量,有没有办法在Django中添加某种约束?或者我是否需要在我检查值的所有地方添加max()
?
答案 0 :(得分:3)
有两种方法:
form validation中的第一个。
model validation中的第二个(适用于模型表单)。
<强>更新强>
如果您不使用表单,则可以覆盖save()方法或在预保存信号中编写代码:
pre_save.connect(yourModel_pre_save, sender = yourModel )
def yourModel_pre_save(sender, instance, **kwargs):
if instance.some_value > some_other_value:
raise ValidationError('Value to high')
不要忘记将save()方法包含在try
子句中:
m = yourModel.objects.get( pk = 1 )
try:
m.save()
except ValidationError, e:
import itertools
errors = list( itertools.chain( *e.message_dict.values() ) )
如果您不喜欢信号,则覆盖保存方法:
class yourModel(model.Model):
description=models.CharField()
some_value=models.IntegerField()
...
def save(self, *args, **kwargs):
if self.some_value > some_other_value:
raise ValidationError('Value to high')
super(yourModel, self).save(*args, **kwargs)