Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何将数据添加到多个字段中?_Django_Django Models - Fatal编程技术网

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