4

我有一个 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

我知道 clean 工作正常,因为我在同一个方法上进行了其他验证,并且工作正常,我做错了什么,我该如何解决?提前致谢。

我对其进行了测试,它没有在更新时抛出任何错误消息 verion < prev_value

编辑:我使用新的 django 1.4

4

1 回答 1

9

模型子类实际上最终有一个元类重新格式化它们的所有类属性。因此,您不应该将普通值初始化为类属性。你应该在__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
于 2012-04-26T18:52:33.453 回答