我有以下两种电影和电视的标题模式:
Title
- id
- title
- show_name (FK, Nullable)
TVShow
- id
- title
以下是一些示例数据条目:
Episode_Title
- (1, "Terminator", NULL)
- (2, "ZZZ", 1) --> FK to TVShow (1, "Seinfeld")
- (3, "Abyss", NULL)
以下是分类方法:
- Abyss (sort by episode title if show NULL)
- Seinfeld - ZZZ (sort by show title if show NOT NULL)
- Terminator (sort by title if show NULL)
我怎么用django QuerySet呢?我现在所拥有的,这是不正确的--
Title.objects.filter('title', 'show__title')
最佳答案
我想你想要:
Title.objects.select_related().extra(
select={'sort_title':"COALESCE(`tv_show`.`title`, `title`.`title`)"},
order_by=['sort_title']
)
因此,您要在
SELECT
子句中添加一个“virtual”字段,COALESCE
将给您第一个非空值,因此sort_title将是电视节目的标题(如果有),或者是常规标题。然后你可以按你给它的名字排序。select_related()
使连接在1个查询中完成,我不确定表名是什么,但您可以从那里获取它。。。