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

同じメトンで他の検証を行ったので、クリーンが正常に機能していることはわかっていますが、問題なく機能しています。何が間違っているのか、どうすれば修正できますか?. 前もって感謝します。

テストしましたが、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 に答える