Django:使用manytomy批量更新对象

2024-09-28 05:27:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

class User:
    name = CharField

现在尝试着 users = Users.objects.filter(**somefilters)和{}

实际上,更新操作不起作用,因为M2M对象似乎不受支持。 如果我想做点什么

^{pr2}$

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


Tags: 对象name模型objectsblogfilterusersclass
1条回答
网友
1楼 · 发布于 2024-09-28 05:27:07

您可以做的是在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并在块上遍历blog对象。在

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

相关问题 更多 >

    热门问题