2

我想用两个表的数据批量更新一个表。对于以下文档中提到的更简单的情况,已经给出了解决方案:

Entry.objects.update(headline=F('blog__name'))

对于该解决方案,请参阅

https://stackoverflow.com/a/50561753/1092940

从示例扩展,假设通过名为 的字段有一个外键引用,并且通过名为 的字段Entry有一个外键引用。我想要相当于:BlogblogBlogUserauthor

Entry.objects.update(author_name=F('blog__author__username'))

与先前的解决方案一样,该解决方案预计使用SubQueryOuterRef

我在这里问的原因是因为我对这个问题开始使用多个OuterRefs 的地方缺乏信心,并且对于它所指的外部 ref 产生了混淆。

4

1 回答 1

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)
)

因此,您在此处指定要查找Author与 a 相关Blogid等于blog_idEntry

于 2019-08-08T12:59:48.653 回答