复合复合order_by django查询

时间:2013-05-21 19:14:18

标签: python mysql django

我有以下两种型号的电影和电视:

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')

1 个答案:

答案 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个查询中完成的,我不确定表名是什么,但是你可以从那里拿出来......