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