form.save()とcommit=False
データを永続化し、保存前にインスタンスを調整します
「form.save()とcommit=False」はCoddyKit上の無料Django Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDjango Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Django Academyコースには全4レッスンが含まれています。
1行で保存する
ModelFormの大きな利点はsave()です。フォームのバリデーションが成功したら、1回呼び出すだけでデータを新しい行としてデータベースに書き込めます。💾
if form.is_valid():
form.save()save()はオブジェクトを返す
save()を呼び出すと、保存されたモデルインスタンスが返されます。新しいオブジェクトへリダイレクトしたい場合や、新しいidを読み取りたい場合に利用できます。
post = form.save()
print(post.id)保存前にバリデーションする
必ずis_valid()で確認してからsave()を呼び出します。無効なフォームを保存するとエラーになるため、毎回先に有効性を確認してください。
if form.is_valid():
form.save()既存の行を編集する
instanceを指定してフォームを作成した場合、save()は新しい行を作らず、その行を更新します。同じメソッドでも結果が異なります。
form = PostForm(request.POST, instance=post)
if form.is_valid():
form.save()一時停止が必要な場合
モデルには、フォームで入力させないフィールドがあることもよくあります。たとえばauthorです。行をデータベースに保存する前に、自分で設定する必要があります。
commit=Falseを使う
save(commit=False)を呼び出すと、フォームからモデルインスタンスを作成しますが、まだデータベースには書き込みません。インスタンスをメモリ上で保持できます。
post = form.save(commit=False)フォームで省略したフィールドを設定する
保存前のインスタンスを取得したら、追加のデータを設定できます。ここでは、保存前にログイン中のユーザーをauthorとして設定します。
post = form.save(commit=False)
post.author = request.user保存を完了する
インスタンスを調整したら、そのインスタンス自身のsave()メソッドを呼び出して保存します。これでフォームのデータと追加したフィールドが一緒に保存されます。
post.author = request.user
post.save()完全なパターン
この3段階のcommit=Falseパターンは、フォームの入力とサーバー側で設定する値を、簡潔かつ安全に組み合わせる一般的な方法です。
post = form.save(commit=False)
post.author = request.user
post.save()多対多の場合の注意点
注意点が1つあります。commit=Falseを使うと、多対多の関連はまだ保存されません。インスタンスを保存した後にsave_m2m()を呼び出して関連付けてください。
post.save()
form.save_m2m()成功後にリダイレクトする
行を保存したら、ユーザーを次へ進めます。POSTが成功した後にredirectすると、誤った二重送信を防げます。
post.save()
return redirect("post_detail", pk=post.pk)簡単な確認
save(commit=False)を使うと、何ができるようになりますか?
まとめ:フォームの保存
順調です!is_valid()の後にsave()を呼ぶと行が保存されます。commit=Falseで追加のフィールドを先に設定し、その後インスタンスを保存します。必要ならsave_m2m()も呼び出します。✅
AI チューターと学ぶ Python — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「form.save()とcommit=False」レッスンは無料ですか?
はい。「form.save()とcommit=False」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Django Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Django Academyコースには全4レッスンが含まれています。
「form.save()とcommit=False」で何を学びますか?
データを永続化し、保存前にインスタンスを調整します ブラウザで直接実行するハンズオンコードでDjango Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Django Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDjango Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「form.save()とcommit=False」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDjango Academyレッスンでコードを書いて実行できますか?
はい。すべてのDjango Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ModelFormとMeta.fieldsの宣言
- form.save()とcommit=False
- cleanメソッドによるカスタムバリデーション
- Widgets、Labels、Help Text