Django query_set order_by поле по умолчанию, если поле упорядочивания - пустая строка

У меня есть query_set, который я хочу упорядочить по Lower('title'). Однако для некоторых элементов title является пустым (blank=True). Поэтому, когда я сортирую, эти элементы по праву оказываются наверху. Однако все элементы, независимо от того, какие они, имеют default_title. Поэтому я хочу использовать default_title элемента в сортировке, если title пуст.

.order_by(Lower('title') if Lower('title') != '' else Lower('website_title')) не работает

Создайте новое поле order_title = charfields(max_lengh=..., null=True). Сохраните в нем заголовок, если он есть, иначе сохраните заголовок_сайта. И сделайте заказ по нему

Это работает

query_set = query_set.annotate(order_title=Coalesce(
        Case(
            When(title__exact='', then=None),
            When(title__isnull=False, then='title'),
            default=None,
            output_field=CharField()
        ),'default_title')).order_by('order_title')
Вернуться на верх