python - Django:跨三个模型进行注释
问题描述
我想对annotate
a 进行复杂的调用,但QuerySet
我不知道如何构建它。你能帮忙吗?
我将尝试简化我的设置:
我有 3 个模型Movie
:Actor
和Casting
。
每个Casting
都有一个外键 aMovie
和 anActor
和一个CharField
for role
。
例如,Casting
可以是约翰尼德普在加勒比海盗中扮演杰克斯派洛。
我想要一份电影列表,每部电影都会有一个注释,说明约翰尼·德普在该电影中扮演的角色。如果他没有在那部电影中演出,那应该是None
。
请注意,我给出的是特定的演员,我不想遍历所有演员。
解决方案
你可以.annotate(..)
用一个Case(..)
对象:
Movie.objects.annotate(
role=Min(Case(
When(casting__actor=my_actor, then=F('casting__role')),
default=None
))
)
现在Movie
对象将具有一个属性,该属性.role
包含该role
参与者的 。
如果演员有多个角色,它将采用字典顺序最小的一个,如果没有这样的演员,它将采用None
.
推荐阅读
- apache-kafka - 找不到类 io.confluent.connect.hdfs3.Hdfs3SinkConnector
- python - python摄影测量工具箱问题
- reactjs - Fontawesome 图标 React
- wordpress - 在结帐页面有条件地隐藏所选付款方式的结帐字段
- python - python用于列表列表中的一个键,打印相应的值
- ruby-on-rails - 迁移数据库导轨上的权限被拒绝@rb_file_s_rename
- javascript - 无法查询嵌套的猫鼬数组?
- nginx - Envoy 代理:是否可以像在 nginx 中一样使用 .htpasswd 创建基本身份验证?
- node.js - 有没有办法在 Nest JS 的装饰器中获取请求上下文
- javascript - 我只是从 JS 开始,我真的不明白 setTimeout 是如何工作的