6

こんにちは、多対多のフィールドが 2 つあるモデルがあります。1 つはスルー テーブルを使用しない標準の m2m フィールドですが、もう 1 つはもう少し複雑でスルー テーブルがあります。Django forms.modelform を使用してフォームを表示および保存しています。フォームを保存するために必要なコードは

if form.is_valid():
        f = form.save(commit=False)
        f.modified_by = request.user
        f.save()
        form.save_m2m()

フォームを保存しようとすると、次のエラーが表示されます。

中間モデルを指定する ManyToManyField に値を設定できません。

スルーテーブルのために form.save_m2m() を実行すると、これが発生していることがわかります。私がやろうとしているのは、Django にスルー テーブルで m2m フィールドを無視するように指示することですが、スルー テーブルなしで m2m フィールドを保存することです。その後、スルー テーブル フィールドのデータを手動で保存できます。

ありがとう

4

2 に答える 2

4

複数のフィールドを持つモデルがある場合、1つはスルーテーブルを使用して実行され、もう1つはスルーテーブルを使用しない通常の多対多の関係になります。それでもsave_m2m()を使用して通常のものを保存できます。フォームの除外リストにスルーフィールドを追加するだけです。

フォームクラス内に追加します。

class Meta:
    model = YourModel
    exclude = ('m2mthroughfield',)
于 2011-01-09T11:46:11.363 に答える
0

「スルーテーブルなしで」m2mを保存することはできません

保存したいデータはスルーテーブルに保存されます(スルーテーブルのみ)

于 2009-12-23T20:57:57.147 に答える