2016-04-13 2 views
0

私はDjangoの管理者を経由して編集することを意図しているmodels.pyでシンプルなモデルがあるとします。Djangoモデルのcleanメソッドをオーバーライドすると、他の検証が中断されますか?

class Range(models.Model): 
    gt = models.IntegerField('Greater than') 
    lt = models.IntegerField('Lesser than') 

    def clean(self): 
     if self.gt >= self.lt: 
      raise ValidationError('Incorrect range') 

問題を:上記のコードはgtltよりも小さいという仮定を確保する上で素晴らしい仕事をしていませんが、それは、 Djangoがすぐに提供するその他の基本的な検証も中断します。例えば、私はDjangoの管理者でこれらのフィールドのためのいくつかの非数値データを入力した場合、私は複数の画面にまたがるデバッグメッセージを提示しています:

enter image description here

を私はの定義からオーバーライドclean(self)方法を削除した場合Range、この基本的な検証が再び正常に動作し始める:

enter image description here

しかし、もちろん、今私はltより大きいgtRange Sを入力することができます。

私は本当に私が間違っているのかわからない、私はしかし、私は単純にhttps://docs.djangoproject.com/en/1.9/ref/models/instances/#validating-objectsあたり

として、Djangoのドキュメント従っていましたので、私のミスですか?私のフォームの検証を正しく提供するには?

答えて

1

あなたが最初に親cleanの方法を実行することができます。

class Range(models.Model): 
    gt = models.IntegerField('Greater than') 
    lt = models.IntegerField('Lesser than') 

    def clean(self): 
     super(Range, self).clean() 

     if self.gt >= self.lt: 
      raise ValidationError('Incorrect range') 
関連する問題