基于 Django 文档,我应该能够一次传递多个对象以添加到多对多关系中,但我得到了一个
* TypeError:不可散列的类型:'list'
当我尝试传递一个列表中的 django 查询集时。传递 Queryset 或 ValuesListQueryset 似乎也失败了。有没有比使用 for 循环更好的方法?
基于 Django 文档,我应该能够一次传递多个对象以添加到多对多关系中,但我得到了一个
* TypeError:不可散列的类型:'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()
# Add the results to the many to many field (notice the *)
group = MyGroup.objects.get(name='test')
group.permissions.add(*permissions)
Django 1.9 增加了添加到多对多关系的其他方法。
set
是一个新的细节:
>>> new_list = [obj1, obj2, obj3]
>>> e.related_set.set(new_list)