[英]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.