如何将数据添加到ManyToMany字段?

时间:2009-07-25 16:02:59

标签: django django-models

我无法在任何地方找到它,所以你的帮助对我很好:)这就是那个领域:

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]

2 个答案:

答案 0 :(得分:105)

有一整页Django文档devoted to this,从内容页面索引。

如该页面所述,您需要执行以下操作:

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

my_obj.categories.create(name='val1')

答案 1 :(得分:0)

万一其他人最终难以自定义管理表单Many2Many保存行为,您就无法在self.instance.my_m2m.add(obj)覆盖中调用ModelForm.save,因为ModelForm.save随后会从{ {1}}会覆盖您的更改。而是致电:

self.cleaned_data['my_m2m']

(将传入的QuerySet转换为列表是很好的方法-my_m2ms = list(self.cleaned_data['my_m2ms']) my_m2ms.extend(my_custom_new_m2ms) self.cleaned_data['my_m2ms'] = my_m2ms 仍然可以这样做。)