根据Django文档,我应该能够一次传递多个对象来添加到多对多关系中,但我得到了一个
* TypeError:不可哈希类型:list
当我试图传递一个转换为列表的django queryset时。传递一个Queryset或ValuesListQueryset似乎也会失败。有比使用for循环更好的方法吗?
根据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)