首页 > 解决方案 > 基于最新相关模型字段的 Django 过滤器

问题描述

我有一个模型帖子和评论,我正在尝试过滤帖子列表以仅显示在epic_bool最新评论中具有特定布尔值(此处称为 )的帖子。

我正在尝试如下:

object_list = Post.objects.all()

newest = Comment.objects.filter(
    post=OuterRef('pk')
).order_by('-upload_date')
Post.objects.annotate(
    is_true=Subquery(newest.values('epic_bool')[:1])
)
object_list = object_list.filter(is_true=True)

但我明白了FieldError

Cannot resolve keyword 'is_true' into field. Choices are: ...

我不明白为什么,因为我正在尝试注释而不是解析字段!?

标签: pythondjango

解决方案


解决方案:

    newest = Comment.objects.filter(
        post=OuterRef('pk')
    ).order_by('-upload_date')
    object_list = object_list.annotate(
        epic_bool=Subquery(newest.values(epic_bool)[:1])
    ).filter(epic_bool=True)

推荐阅读