私はobject.save(commit=False)
のようなことをすると私のm2mの関係は自動的には保存されませんが、後でobject.save()
に電話すると、self.save_m2m()
も呼び出すことになります。save_m2m()を自動的にsave()しないのはなぜですか?
私はsave()
と呼んでいるので、なぜ手動でsave_m2m()
を呼び出す必要があるのか分かりません。
誰かがこの背後にある論理を説明できますか?
ありがとうございます。
私はobject.save(commit=False)
のようなことをすると私のm2mの関係は自動的には保存されませんが、後でobject.save()
に電話すると、self.save_m2m()
も呼び出すことになります。save_m2m()を自動的にsave()しないのはなぜですか?
私はsave()
と呼んでいるので、なぜ手動でsave_m2m()
を呼び出す必要があるのか分かりません。
誰かがこの背後にある論理を説明できますか?
ありがとうございます。
ドキュメントではこれについて説明しています。
form.save()
には、M2Mリレーションシップの作成と保存が含まれています。これはフォームがすべてのことを一度に行うことができるからです。しかし、commit=False
を使用するとすぐに、フォームはオブジェクト自体が保存されていないため、M2Mリレーションシップを作成できなくなります。リンクするIDがないとM2Mは不可能です。
object.save()
は、モデルインスタンスオブジェクトではなくフォームのアクションであるため、save_m2m
を呼び出すことはできません。フォームはそれらを作成できなかったので、オブジェクトはこの時点でのm2m関係についても知らない。そのため、という形式のsave_m2mメソッドを呼び出す必要があります。。
Gotcha。ありがとうございました。 –