2012-09-26 22 views
10

私は、Djangoモデルの特定のフィールドのための独自の検証ルーチンを定義したいと思います。 管理フォームにエラーメッセージを表示したいのですが、エンティティが独自のPythonコードで保存されている場合も同じ検証が必要です。 DRYの原則を破ることなくこれを行う方法はありますか?モデルと管理者のDjangoフィールド検証?

答えて

8

個々のフィールドを検証する場合はwrite a validatorとし、モデルフィールドに追加します。

モデルのfull_cleanメソッドが呼び出されると、フィールドのバリデータが実行されます。モデルフォームが検証されると(Django管理者を含む)、実行されますが、モデルインスタンスの保存時には自動的に実行されません。full_cleanをPythonコードで手動で呼び出す必要があります。

m = MyModel(x=20) 
m.full_clean() # may raise ValidationError 
m.save() 

は、モデルが保存されるたびに実行するためにバリデータを強制したい場合は、saveメソッドをオーバーライドすることができ、そこfull_cleanを呼び出します。これにより、モデルフォームとdjango管理者を使用しているときに、検証が2回実行されることに注意してください。

関連する問題