2012-01-28 5 views
24

私は、特に管理者からモデルを保存するときに実行するいくつかのアクションがあります。いくつかのフィールドを大文字にして、フィールドまたはフィールドのどちらかが満たされていることを確認します。私はフィールドスラッグも作成します。ここでは、これらはcleanとsave関数をオーバーライドするように分割されています。今は動作しますが、それぞれをいつ使うのが好きです。私はドキュメントを見て、いつ使うべきかを具体的に見つけることができませんでした。Djangoはモデルをクリーン()とセーブ()をオーバーライドする

答えて

30

妥当性検査に関連する作業を行い、入力を解析/変更する/そうでなければクリーンアップする必要があります。フィールドを大文字にし、スラッグを生成することができます。また、cleanを使用して、post_typeのようなフィールドをプロキシモデルの特定の値に強制します。 django.core.exceptions.ValidationError('error text')をきれいにすると、'error text'form.non_field_errorsに追加されます。

保存は、モデルが実際に保存される方法を変更する場所です。たとえば、私は保存を使ってアップロードされた画像を作っています。 ValidationErrorはここで上げても捕まえられません。その2つの間で最も重要な実用的な違いだと思います。

+2

ああ、私のキーボードの右の単語を盗んだ。いい答え。私が追加しようとしている唯一のことは、 'ValidationError'の良い例があるドキュメントへのリンクです:https://docs.djangoproject.com/en/dev/ref/models/instances/#django .db.models.Model.clean –

+4

django.forms.ValidationErrorではなく、django.core.exceptions.ValidationError – benjaoming

+0

良いキャッチです。私はちょうど常にフォームからインポートしたと思います(core.exceptionsからインポートします)。答えを更新する。 – dokkaebi

関連する問題