我有以下两种型号的电影和电视:
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')
答案 0 :(得分:2)
我想你想要:
Title.objects.select_related().extra(
select={'sort_title':"COALESCE(`tv_show`.`title`, `title`.`title`)"},
order_by=['sort_title']
)
因此,您要在SELECT
子句中添加“虚拟”字段,COALESCE
将为您提供第一个非空值,因此如果有一个,则sort_title将是电视节目的标题,或者常规头衔。然后你可以按你给它的名字排序。 select_related()
是连接在1个查询中完成的,我不确定表名是什么,但是你可以从那里拿出来......