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

* TypeError:不可哈希类型:list

当我试图传递一个转换为列表的django queryset时。传递一个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()

# 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)