Django 如何将数据添加到多个字段中?
我在任何地方都找不到它,所以您的帮助对我来说将是很好的:)这是该字段:Django 如何将数据添加到多个字段中?,django,django-models,Django,Django Models,我在任何地方都找不到它,所以您的帮助对我来说将是很好的:)这是该字段: categories = models.ManyToManyField(fragmentCategory) 碎片类别: class fragmentCategory(models.Model): CATEGORY_CHOICES = ( ('val1', 'value1'), ('val2', 'value2'
categories = models.ManyToManyField(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" />
或:
Django文档有一整页,从目录页索引良好 正如该页所述,您需要执行以下操作:
my_obj.categories.add(fragmentCategory.objects.get(id=1))
或
如果其他人最终在这里努力定制管理表单的许多保存行为,您不能在您的
ModelForm.save中调用self.instance.my_m2m.add(obj)
覆盖,因为ModelForm.save
稍后会从self.cleaned_data['my_m2m']
填充您的m2m,从而覆盖您的更改。相反,请致电:
my_m2ms = list(self.cleaned_data['my_m2ms'])
my_m2ms.extend(my_custom_new_m2ms)
self.cleaned_data['my_m2ms'] = my_m2ms
(将传入的查询集转换为列表很好,ManyToManyField
也可以这样做。)然后您需要调用my_obj.save()
来保存更新吗?还是这是自动完成的?@CpILL似乎是自动完成的。请在python manage.py shell
中试用。您需要调用此文档。save too:@mehdi您只需在第一次使用多对多字段创建对象时调用save,以便它获得主键。在这之后,行为是您可以添加而不保存。
my_obj.categories.add(fragmentCategory.objects.get(id=1))
my_obj.categories.create(name='val1')
my_m2ms = list(self.cleaned_data['my_m2ms'])
my_m2ms.extend(my_custom_new_m2ms)
self.cleaned_data['my_m2ms'] = my_m2ms