【问题标题】:Django bulk update with data two tables overDjango 批量更新两个表的数据
【发布时间】:2019-12-16 04:44:28
【问题描述】:

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

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

有关该解决方案,请参阅

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

从示例展开,假设Entry 通过名为blog 的字段具有对Blog 的外键引用,并且Blog 通过名为@987654328 的字段具有对User 的外键引用@。我想要相当于:

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

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

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

【问题讨论】:

    标签: django django-orm django-database django-database-functions


    【解决方案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)
    )

    因此,您在此处指定要查找具有相关BlogAuthor,其中id 等于Entryblog_id

    【讨论】:

    • Author 回到Blog 的相关名称更可能是blogs,因为一个作者可以有多个博客。也就是说,我想我仍然可能会得到这个。仍在咀嚼它。
    • @AlanSE:如果没有指定related_name,则为blog__,否则为related_name__id(当然有related_name相关名称)。
    • 一直以来我都认为嵌套的Subquerys 是必要的。在对我自己的问题(不再是一系列前向 ForeignKeys)以及您的示例进行更深入的调查之后,事实证明无论如何都没有必要。谢谢,已解决。
    猜你喜欢
    • 2018-06-02
    • 1970-01-01
    • 2023-01-11
    • 2012-02-02
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2021-03-21
    • 2017-05-13
    相关资源
    最近更新 更多