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

lok*_*oki 2 django django-models validationerror django-1.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
Run Code Online (Sandbox Code Playgroud)

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

我测试了它并且它没有在verion <prev_value的更新上抛出任何错误消息

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

jdi*_*jdi 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
Run Code Online (Sandbox Code Playgroud)

  • @user1108631:`__init__` 在从数据库查询创建实例或手动创建新实例时调用。Clean 稍后由验证过程调用。 (2认同)