10

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

4

1 に答える 1

9

個々のフィールドを検証する場合は、バリデーターを作成してモデルフィールドに追加できます。

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

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

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

于 2012-09-26T22:50:55.137 に答える