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名称
相关的名称)。一直以来,我都认为嵌套的
子查询
是必要的。在对我自己的问题进行了更深入的调查(不再是一系列前瞻性的外国钥匙)以及你的例子之后,结果证明在任何情况下都没有必要这样做。谢谢,这已经解决了。