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