【问题标题】:how to check a previous value on a django model如何检查 django 模型上的先前值
【发布时间】:2012-05-07 12:59:17
【问题描述】:

我有一个 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 工作正常,因为我在同一个方法上进行了其他验证,并且工作正常,我做错了什么,我该如何解决? 提前致谢。

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

编辑:我正在使用新的 django 1.4

【问题讨论】:

  • 你能解释一下哪个部分不适合你吗?

标签: django django-models django-1.4 validationerror


【解决方案1】:

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

【讨论】:

  • 它工作,现在我在尝试你的版本之前尝试了 self._prev_value = 0 并且它没有工作,我想知道首先调用什么 init,清理或保存跨度>
  • @user1108631:__init__ 在从数据库查询创建实例或手动创建新实例时调用。 Clean 稍后由验证过程调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多