如何检查django模型上的先前值

时间:2012-04-26 18:41:04

标签: django django-models django-1.4 validationerror

我有一个django模型,其中包含一个字段,我希望它在更新后总是比同一个模型实例的前一个更大,如下所示:

class MyModel(models.Model):
    version = models.FloatField()
    prev_value = 0

    def clean(self):
        if self.version <= self.prev_value:
             raise ValidationError('error msg')

    def save(self,*args,**kwargs):
        super(MyModel, self).save(*args, **kwargs)
        self.prev_value = self.version

我知道干净工作正常,因为我已经对同一种方法进行了其他验证,它工作正常,我做错了,我该如何解决? 提前谢谢。

我对它进行了测试,并且没有在版本更新时抛出任何错误消息&lt; prev_value

编辑:即时通讯使用新的django 1.4

1 个答案:

答案 0 :(得分:6)

模型子类实际上最终会让元类重新格式化所有类属性。因此,您不应该将普通值初始化为类属性。您应该在__init__

中执行此操作
class MyModel(models.Model):
    version = models.FloatField()

    def __init__(self, *args, **kwargs):
        super(MyModel, self).__init__(*args, **kwargs)
        self._prev_value = self.version

    def clean(self):
        if self.version <= self._prev_value:
             raise ValidationError('error msg')

    def save(self,*args,**kwargs):
        super(MyModel, self).save(*args, **kwargs)
        self._prev_value = self.version