我有以下两种电影和电视的标题模式:

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个查询中完成,我不确定表名是什么,但您可以从那里获取它。。。

10-05 20:48
查看更多