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

根据Django文档,我应该能够一次传递多个对象来添加到多对多关系中,但我得到了一个

TypeError:不可哈希类型:'list'

当我试图传递一个转换为列表的django queryset时。传递一个Queryset或ValuesListQueryset似乎也会失败。有比使用for循环更好的方法吗?

135012 次浏览

文档中所述,使用: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()


# Add the results to the many to many field (notice the *)


group = MyGroup.objects.get(name='test')


group.permissions.add(*permissions)

来自:插入queryset结果到ManytoManyfield

Django 1.9增加了添加多对多关系的额外方法。

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

set是一个新的细节:

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