我想对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.