gpt4 book ai didi

python - 如何使用子查询用其他对象注释 Django QuerySet

转载 作者:太空狗 更新时间:2023-10-30 01:36:52 25 4
gpt4 key购买 nike

在 Django 1.11 版本中,Subquery expressions添加。我希望使用此功能根据一些过滤器选择相关的模型对象。

这是来自 documentation 的示例:

from django.db.models import OuterRef, Subquery
newest = Comment.objects.filter(post=OuterRef('pk')).order_by('-created_at')
Post.objects.annotate(newest_commenter_email=Subquery(newest.values('email')[:1]))

我想做同样的事情,但在这种情况下,我不只是用“newest_commenter_email”进行注释,我希望将整个 Comment 对象保存到newest_comment 注释,像这样:

from django.db.models import OuterRef, Subquery
newest = Comment.objects.filter(post=OuterRef('pk')).order_by('-created_at')
Post.objects.annotate(newest_comment=Subquery(newest[:1]))

但是,这会导致以下错误:

FieldError: Expression contains mixed types. You must set output_field

有解决办法吗?

最佳答案

您想过滤相关模型,因此我提供的这种情况 Prefetch() 是我能想到的最佳选择之一

您可以从这里阅读 Django1.1 Prefetch Objects

这是您正在寻找的示例

from django.db.models import Prefetch
newest = Comment.objects.filter(do_your_filters_here)
Post.objects.prefetch_related(Prefetch("comments", queryset=newest, to_attr="newest_comments"))

关于python - 如何使用子查询用其他对象注释 Django QuerySet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44783587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com