簡體   English   中英

復雜復合order_by Django查詢

[英]Complex compound order_by django query

我有以下兩個電影和電視節目的標題模型:

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子句中添加一個“虛擬”字段, COALESCE將為您提供第一個非null值,因此sort_title將是電視節目的標題(如果有的話)或常規標題。 然后,您可以按提供的名稱進行排序。 select_related()是為了使select_related()在1個查詢中完成,我不確定表名是什么,但是您可以從那里獲取它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM