Django批量更新,数据覆盖两个表
我想用两个表的数据批量更新一个表。针对以下文件中提到的较简单的情况给出了解决方案:Django批量更新,数据覆盖两个表,django,django-orm,django-database,django-database-functions,Django,Django Orm,Django Database,Django Database Functions,我想用两个表的数据批量更新一个表。针对以下文件中提到的较简单的情况给出了解决方案: Entry.objects.update(headline=F('blog__name')) 有关该解决方案,请参见 从示例展开,假设Entry通过名为Blog的字段有一个指向Blog的外键引用,而Blog通过名为author的字段有一个指向User的外键引用。我想要相当于: Entry.objects.update(author_name=F('blog__author__username')) 与前面的
Entry.objects.update(headline=F('blog__name'))
有关该解决方案,请参见
从示例展开,假设Entry
通过名为Blog
的字段有一个指向Blog
的外键引用,而Blog
通过名为author
的字段有一个指向User
的外键引用。我想要相当于:
Entry.objects.update(author_name=F('blog__author__username'))
与前面的解决方案一样,该解决方案预计将使用子查询
和外部查询
我在这里问这个问题的原因是因为我对这个问题开始使用多个OuterRef
s缺乏信心,并且对它所指的外部ref产生了混淆
我在这里问这个问题的原因是因为我对这个问题开始使用多个outerref的地方缺乏信心,并且对它所指的outerref产生了混淆
它不需要多个外部引用,您可以使用以下内容进行更新:
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)
)
从django.db.models导入OuterRef,子查询
author\u name=author.objects.filter(
blogs\u id=OuterRef('blog\u id')
).价值观清单(
“用户名”
)[:1]
Entry.objects.update(
author\u name=子查询(author\u name)
)
因此,您在这里指定查找一个
作者
,其相关博客
的id
与条目
的博客id
相等,因为作者可以有多个博客,所以从作者
返回到博客
的相关名称更可能是博客
。也就是说,我想我还是会得到这个。仍然在咀嚼它。@AlanSE:如果没有指定相关的\u名称
,则它是博客\uuuuu
,否则它是相关的\u名称
(当然是相关的\u名称
相关的名称)。一直以来,我都认为嵌套的子查询
是必要的。在对我自己的问题进行了更深入的调查(不再是一系列前瞻性的外国钥匙)以及你的例子之后,结果证明在任何情况下都没有必要这样做。谢谢,这已经解决了。