首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Django中一次向ManyToMany关系中添加多个对象?

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

Stack Overflow用户
提问于 2011-02-11 00:04:03
回答 3查看 112.8K关注 0票数 235

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

* TypeError:不可散列的类型:'list‘

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-11 00:10:15

用法:documentation中描述的object.m2mfield.add(*items)

add()接受任意数量的参数,而不是一组参数。

代码语言:javascript
复制
add(obj1, obj2, obj3, ...)

要将该列表扩展为参数,请使用*

代码语言:javascript
复制
add(*[obj1, obj2, obj3])

附录:

Django不会为每一项调用obj.save(),而是使用bulk_create()

票数 393
EN

Stack Overflow用户

发布于 2015-08-28 16:45:14

此外,如果您想从查询集中添加它们

示例

代码语言:javascript
复制
# 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)

来自:Insert queryset results into ManytoManyfield

票数 73
EN

Stack Overflow用户

发布于 2016-07-03 12:43:05

Django 1.9增加了添加到多对多关系中的其他方法。

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

set是一个新的nicety:

代码语言:javascript
复制
>>> new_list = [obj1, obj2, obj3]
>>> e.related_set.set(new_list)
票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4959499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档