Django:跨三个模型进行注释

2024-05-29 09:41:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想对QuerySet进行一个复杂的annotate调用,但我不知道如何构建它。你能帮忙吗

我会尽量简化我的设置:

我有3个模型:MovieActorCasting

每个Casting都有一个指向MovieActor的外键,以及roleCharField

例如,约翰尼·德普在《加勒比海盗》中扮演杰克·斯派洛

我想得到一个电影列表,每部电影都会有一个注释,说明约翰尼·德普在那部电影中扮演的角色。如果他没有在那部电影里演,那应该是None

请注意,我给一个特定的演员,我不想超过所有演员


Tags: 模型角色列表电影movie外键rolequeryset
1条回答
网友
1楼 · 发布于 2024-05-29 09:41:44

可以使用.annotate(..)对象Case(..)执行此操作:

Movie.objects.annotate(
    role=Min(Case(
        When(casting__actor=my_actor, then=F('casting__role')),
        default=None
    ))
)

现在Movie对象将具有一个属性.role,该属性保存该参与者的role

如果参与者有多个角色,它将采用词典中最小的一个,如果没有这样的参与者,它将采用None

相关问题 更多 >

    热门问题