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