次の関数を使用して、保存前の処理を実行できることを知っています。しかし、検証を行うためのリクエストからのテキストフィールド値など、リクエストデータにアクセスするにはどうすればよいですか?
def save_model(self, request, obj, form, change):
# do something for validation
obj.save()
次の関数を使用して、保存前の処理を実行できることを知っています。しかし、検証を行うためのリクエストからのテキストフィールド値など、リクエストデータにアクセスするにはどうすればよいですか?
def save_model(self, request, obj, form, change):
# do something for validation
obj.save()
生のリクエスト データはrequest.POST
、通常どおり に保存されます。form.cleaned_data
Django は既に検証済みなので、にアクセスする方がよいでしょう。
ただし、save_model
メソッドはおそらく検証を行うのに適切な場所ではありません。を発生させた場合ValidationError
、例外はキャッチされず、ユーザーは 500 サーバー エラー ページを取得します。このsave_model
方法は、データがすでに有効であることがわかっている場合に適しています。たとえば、request.user
保存する前にオブジェクトの作成者を設定する場合などです。
カスタム バリデーションを行いたい場合は、モデル フォームを定義し、それをモデル管理者のModelAdmin.form
設定で使用することをお勧めします。
これも私を大いに助けました!