gpt4 book ai didi

python - django:使用 ManyToMany 批量更新对象

转载 作者:太空宇宙 更新时间:2023-11-03 11:23:29 24 4
gpt4 key购买 nike

我有以下问题:我需要更新一组具有相同 many_to_many 字段的对象。所以假设我有以下模型

class Blog:
name = CharField
users = M2M(User)

class User:
name = CharField

现在尝试类似users = Users.objects.filter(**somefilters)Blog.objects.filter(#getting very large list of blogs).update(users=users)

实际上更新操作不起作用,因为似乎不支持 M2M 对象。如果我想做某事列表

for blog in large_list_of_blogs:
blog.users.add(users)

它非常非常慢,因为每个对象都是单独访问的。

最佳答案

您可以做的是在 M2M 关系的中间模型上使用 bulk_create

我从您的示例中可以看出,您希望为一组博客分配同一组用户。

因此,示例实现如下所示:

users = Users.objects.filter(**somefilters)
blogs = Blog.objects.filter(**another_filters)

BlogUserRelation = Blog.users.through

relations = []
for blog in blogs:
relations.extend([BlogUserRelation(
user_id=user.id,
blog_id=blog.id
) for user in users])

BlogUserRelation.objects.bulk_create(relations)

这在数据库查询方面是高效的,但需要将所有对象加载到内存中。为了提高内存效率,您需要使用某种 queryset iterator并按 block 遍历博客对象。

还有一件事要记住,通常当你使用 blog.users.add(users) 时,django 检查现有的 user-blog 关系并排除它们,使用 bulk_create 则不是这种情况,如果需要,您必须手动执行。

关于python - django:使用 ManyToMany 批量更新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38400889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com