[英]Django: Annotate across three models
我想通過QuerySet
進行復雜的annotate
調用,但我不知道如何構建它。 你能幫忙嗎?
我將嘗試簡化設置:
我有3個模型: Movie
, Actor
和Casting
。
每個Casting
都有一個Movie
和Actor
的外鍵,以及一個role
的CharField
。
例如, Casting
可能是約翰尼·德普(Johnny Depp)在加勒比海盜中扮演傑克·斯派洛(Jack Sparrow)。
我想獲取電影列表,每部電影都有一個注釋,說明約翰尼·德普在該電影中扮演的角色。 如果他沒有參加那部電影,那就應該是None
。
請注意,我給的是特定的演員,我不想討論所有的演員。
您可以使用Case(..)
對象對此進行.annotate(..)
:
Movie.objects.annotate(
role=Min(Case(
When(casting__actor=my_actor, then=F('casting__role')),
default=None
))
)
現在, Movie
對象將具有屬性.role
,該屬性持有該演員的role
。
如果角色有多個角色,則將采用字典上最小的角色;如果沒有此類角色,則將采用None
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.