1

映画とテレビのタイトルには、次の 2 つのモデルがあります。

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

1 に答える 1

2

私はあなたが欲しいと思います:

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()は、結合が1つのクエリで行われるようにするためです。テーブル名が何であるかはわかりませんが、そこから取得できます...

于 2013-05-21T19:25:58.527 に答える