python – Django:对三个模型进行注释

我想对QuerySet进行复杂的注释调用,我不知道如何构建它.你能帮忙吗?

我会尝试简化我的设置:

我有3个模特:电影,演员和演员.

每个Casting都有一个Movie和一个Actor的外键,以及一个CharField for role.

例如,铸造可以是约翰尼德普在加勒比海盗中饰演杰克斯派洛.

我想得到一个电影列表,每部电影都会有一个注释,说明约翰尼德普在那部电影中扮演的角色.如果他不参与那部电影,那应该是无.

请注意,我正在给一个特定的演员,我不想重复所有演员.

最佳答案 你可以使用Case(..)对象来注释(..)这个:

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

现在,Movie对象将具有一个属性.role,用于保存该actor的角色.

如果actor有多个角色,它将采用按字典顺序排列的最小角色,如果没有这样的角色,它将采用None.

点赞