【发布时间】:2017-11-27 15:54:12
【问题描述】:
Asset.objects.filter(
campaigns__games__pk=_version.game_id,
campaigns__is_active=True,
campaigns__games__active=True,
is_active=True).select_related('org').all()
此查询返回 49 条记录
Asset.objects.filter(
campaigns__games__pk=_version.game_id,
campaigns__is_active=True,
campaigns__games__active=True,
is_active=True,
coupons__session__device_id='GUID').select_related('org').all()
只有 ONE,因为它使 INNER JOIN 到 Asset.coupons.session 表。 实际上,我想检索与第一个查询中相同的 49 条记录,但如果存在会话表,则需要从会话表中获取更多信息。
所以我想要实现的是 LEFT JOIN,所以如果给定资产会话存在 - 然后我在我的 API 响应中设置一个标志“is_saved=True”。
据我了解 - 正确的方法是使用 Annotate 或 Case/When?
如何实现?
【问题讨论】:
-
你能发布你的模型吗?
标签: django django-models django-orm