基于Django文档,我应该能够一次传递多个对象来添加到许多关系中,但是我得到了一个
* TypeError:不可散列的类型:'list‘
当我试图传递一个在列表中强制转换的django查询集时。传递Queryset或ValuesListQueryset似乎也会失败。有比使用for循环更好的方法吗?
发布于 2011-02-11 00:10:15
用法:documentation中描述的object.m2mfield.add(*items)
add()
接受任意数量的参数,而不是一组参数。
add(obj1, obj2, obj3, ...)
要将该列表扩展为参数,请使用*
add(*[obj1, obj2, obj3])
附录:
Django不会为每一项调用obj.save()
,而是使用bulk_create()
。
发布于 2015-08-28 16:45:14
此外,如果您想从查询集中添加它们
示例
# 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)
发布于 2016-07-03 12:43:05
Django 1.9增加了添加到多对多关系中的其他方法。
set
是一个新的nicety:
>>> new_list = [obj1, obj2, obj3]
>>> e.related_set.set(new_list)
https://stackoverflow.com/questions/4959499
复制相似问题