确保IntegerField永远不会低于Django中的某个值

时间:2011-12-19 23:19:27

标签: django

我想确保模型中的整数字段永远不会低于某个数量,有没有办法在Django中添加某种约束?或者我是否需要在我检查值的所有地方添加max()

1 个答案:

答案 0 :(得分:3)

有两种方法:

<强>更新

如果您不使用表单,则可以覆盖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)