Django 批量更新两个表的数据
Posted
技术标签:
【中文标题】Django 批量更新两个表的数据【英文标题】:Django bulk update with data two tables over 【发布时间】:2019-12-16 04:44:28 【问题描述】:我想用两个表的数据批量更新一个表。已针对以下文档中提到的更简单情况给出了解决方案:
Entry.objects.update(headline=F('blog__name'))
有关该解决方案,请参阅
https://***.com/a/50561753/1092940
从示例展开,假设Entry
通过名为blog
的字段具有对Blog
的外键引用,并且Blog
通过名为@987654328 的字段具有对User
的外键引用@。我想要相当于:
Entry.objects.update(author_name=F('blog__author__username'))
与之前的解决方案一样,该解决方案预计使用SubQuery
和OuterRef
。
我在这里问的原因是因为我缺乏信心这个问题开始使用多个OuterRef
s,并且对于它所指的外部引用产生了混淆。
【问题讨论】:
【参考方案1】:我在这里问的原因是因为我对这个问题开始使用多个 OuterRef 的地方缺乏信心,并且对于它指的是哪个外部 ref 产生了混淆。
它确实不需要需要多个外部引用,你可以更新:
from django.db.models import OuterRef, Subquery
author_name = Author.objects.filter(
blogs__id=OuterRef('blog_id')
).values_list(
'username'
)[:1]
Entry.objects.update(
author_name=Subquery(author_name)
)
因此,您在此处指定要查找具有相关Blog
的Author
,其中id
等于Entry
的blog_id
。
【讨论】:
从Author
回到Blog
的相关名称更可能是blogs
,因为一个作者可以有多个博客。也就是说,我想我仍然可能会得到这个。仍在咀嚼它。
@AlanSE:如果没有指定related_name
,则为blog__
,否则为related_name__id
(当然有related_name
相关名称)。
一直以来我都认为嵌套的Subquery
s 是必要的。在对我自己的问题(不再是一系列前向 ForeignKeys)以及您的示例进行更深入的调查之后,事实证明无论如何都没有必要。谢谢,已解决。以上是关于Django 批量更新两个表的数据的主要内容,如果未能解决你的问题,请参考以下文章
两个表,根据条件批量更新其中一个表的某一列数据。(高分求救,在线等待。)