过滤后更新Django的ManytoMany

时间:2015-12-09 06:46:28

标签: django orm many-to-many

我试图更新某些文章的created_by和edited_by,其中包含与用户的ManytoMany关系,并向其添加另一个用户。

我遇到了 MyModel.objects.filter(pk=some_value).update(field1='some value')

作为使用单个查询进行更新的方法,还有一种方法可以使用单个查询更新ManytoMany吗?

Article.objects.filter(Q(created_by__in=[deleted_user_id])| Q(edited_by__in=[deleted_user_id])).update(?)

我应该更换什么"?"用? 假设我需要添加" replacement_user_id"对过滤器返回的所有文章。

我想我们可以通过查询"通过"模特也许。

1 个答案:

答案 0 :(得分:0)

使用更新方法无法做到这一点:

  

您只能使用此设置非关系字段和ForeignKey字段   方法。要更新非关系字段,请将新值提供为   不变。要更新ForeignKey字段,请将新值设置为新值   您想要指向的模型实例。

了解详情here

更新:

您可以添加多个对象,例如:

articles = Article.objects.filter(Q(created_by__in=[deleted_user_id])| Q(edited_by__in=[deleted_user_id]))
created_by_objs = User.objects.filter(...)
edited_by_objs = User.objects.filter(...)

for article in articles:
    #article.created_by.clear() uncomment if needed
    article.created_by.add(*created_by_objs)
    #article.edited_by.clear() uncomment if needed
    article.edited_by.add(*edited_by_objs)

了解详情here