在Django 1.11版中,添加了Subquery expressions。我希望使用此功能根据某些过滤器选择相关的模型对象。
的示例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
有解决方法吗?
答案 0 :(得分:0)
您在子查询中忽略了values
,请尝试以下操作:
Post.objects.annotate(newest_commenter=Subquery(newest.values('author')[:1]))
其中'author'是评论模型中的“评论者”字段。