如何在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)