2016-10-31 13 views
0

私はobject.save(commit=False)のようなことをすると私のm2mの関係は自動的には保存されませんが、後でobject.save()に電話すると、self.save_m2m()も呼び出すことになります。save_m2m()を自動的にsave()しないのはなぜですか?

私はsave()と呼んでいるので、なぜ手動でsave_m2m()を呼び出す必要があるのか​​分かりません。

誰かがこの背後にある論理を説明できますか?

ありがとうございます。

答えて

1

ドキュメントではこれについて説明しています。

form.save()には、M2Mリレーションシップの作成と保存が含まれています。これはフォームがすべてのことを一度に行うことができるからです。しかし、commit=Falseを使用するとすぐに、フォームはオブジェクト自体が保存されていないため、M2Mリレーションシップを作成できなくなります。リンクするIDがないとM2Mは不可能です。

object.save()は、モデルインスタンスオブジェクトではなくフォームのアクションであるため、save_m2mを呼び出すことはできません。フォームはそれらを作成できなかったので、オブジェクトはこの時点でのm2m関係についても知らない。そのため、という形式のsave_m2mメソッドを呼び出す必要があります。

+0

Gotcha。ありがとうございました。 –

関連する問題