Я использую Django 3.0 Это моя модель:
class StoreIdentification(models.Model):
store = models.ForeignKey(Store, blank=True, on_delete=models.CASCADE, default=None)
description_1_text = models.CharField(max_length=48, null=True, blank=True, default=None)
description_2_text = models.CharField(max_length=48, null=True, blank=True, default=None)
def __str__(self):
return f'{self.store.name} - {self.description_1_text} + {self.description_2_text}'
У меня есть выбор, где мне нужно отсортировать на основе длины объединенного текста обоих description_1_text и description_2_text. Я могу сделать каждый из них в отдельности, все мои попытки провалились. Вот некоторые попытки:
def identify(request):
identifiers = StoreIdentification.objects.all().extra(
select={'char_num': 'Length(description_2_text)' + 'Length(description_1_text)'}
).order_by('-char_num')
for identifier in identifiers:
# Do something ...
Этот возвращает ошибку рядом с длиной (django .db.utils.OperationalError: вблизи "Длина": синтаксическая ошибка)
Другой try:
identifiers = StoreIdentification.objects.all().order_by(
Length('description_1_text' + 'description_2_text').desc())
Этот объединяет description_1_text и description_2_text до их разрешения.
Try # 3:
identifiers = StoreIdentification.objects.all().extra(
select={'char_num': 'Length(description_2_text) + Length(description_1_text)'}
).order_by('-char_num')
Последняя попытка просто проигнорировала Length ( description_1_text) и заказывается только на основе description_2_text. У меня было несколько других попыток, все закончилось так же ... с некоторой ошибкой.
Есть предложения?