如何在Django中一次添加多个对象到ManyToMany关系?

基于Django文档,我应该能够一次传递多个对象,以添加到许多关系,但我得到

* TypeError:不可用types:'list'

当我尝试传递一个Django的查询集列表中。 传递一个Queryset或一个ValuesListQueryset似乎也失败了。 有没有比使用for循环更好的方法?

按照文档中的描述使用: object.m2mfield.add(*items)

add()接受任意数量的参数,而不是它们的列表。

 add(obj1, obj2, obj3, ...) 

要将该列表扩展为参数,请使用*

 add(*[obj1, obj2, obj3]) 

附录:

Django不会为每个项目调用obj.save() ,而是使用bulk_create()

添加,如果你想从查询集添加它们

 # Returns a queryset permissions = Permission.objects.all() # Turns it into a list permissions = list(permissions) # Add the results to the many to many field (notice the *) group = MyGroup.objects.get(name='test') group.permissions.add(*permissions) 

From: 将查询集结果插入ManytoManyfield

Django 1.9添加了添加到多对多关系的其他方法。

文档: https : //docs.djangoproject.com/en/1.9/ref/models/relations/#django.db.models.fields.related.RelatedManager.set

set是一个新的细微:

 >>> new_list = [obj1, obj2, obj3] >>> e.related_set.set(new_list)