Упорядочивание набора запросов по строке модели
Я определяю строку для модели следующим образом:
class Customer(models.Model):
company_name = ...
first_name = ...
last_name = ...
def __str__(self):
if self.company_name != None and self.company_name != "":
return self.company_name
else:
return self.first_name + " " + self.last_name
При запросе клиентов можно ли упорядочить запрос по строке, которая представляет экземпляр модели?
eg c = Customers.objects.all().order_by('???????')
Спасибо!
Вы можете использовать аннотации для генерации той же строки, что и ваш метод __str__ в кверисете, затем вы можете упорядочить по этой аннотации.
Concat можно использовать для объединения first_name и last_name в одно поле
Coalesce вернет первое ненулевое значение, которое можно использовать для реализации if/else
from django.db.models import Value
from django.db.models.functions import Coalesce, Concat
Customer.objects.annotate(
full_name=Concat('first_name', Value(' '), 'last_name')
).annotate(
display_str=Coalesce('company_name', 'full_name')
).order_by('display_str')