web-dev-qa-db-ja.com

ManyToManyフィールドにデータを追加する方法は?

私はどこにもそれを見つけることができないので、あなたの助けは私にとって素晴らしいでしょう:)ここにその分野があります:

categories = models.ManyToManyField(fragmentCategory)

FragmentCategory:

class fragmentCategory(models.Model):

        CATEGORY_CHOICES = (
                        ('val1', 'value1'),
                        ('val2', 'value2'),
                        ('val3', 'value3'),
                        )

        name = models.CharField(max_length=20, choices=CATEGORY_CHOICES)

送信するフォームは次のとおりです。

<input type="checkbox" name="val1" />
<input type="checkbox" name="val2" />
<input type="checkbox" name="val3" />

私は次のようなものを試しました:

categories = fragmentCategory.objects.get(id=1),

または:

categories = [1,2]
62
IProblemFactory

Djangoドキュメンテーション これに専念 )のページ全体があり、コンテンツページから十分に索引付けされています。

そのページが述べているように、あなたはする必要があります:

my_obj.categories.add(fragmentCategory.objects.get(id=1))

または

my_obj.categories.create(name='val1')
110
Daniel Roseman

他の誰かが管理フォームMany2Manyの保存動作をカスタマイズするのに苦労している場合、_ModelForm.save_オーバーライドでself.instance.my_m2m.add(obj)を呼び出すことはできません。_ModelForm.save_は後で_self.cleaned_data['my_m2m']_変更を上書きします。代わりに呼び出します:

_my_m2ms = list(self.cleaned_data['my_m2ms'])
my_m2ms.extend(my_custom_new_m2ms)
self.cleaned_data['my_m2ms'] = my_m2ms
_

(入ってくるQuerySetをリストに変換しても問題ありません。ManyToManyFieldがそれを行います。)

0
Chris