Пользователь отправляет одно из писем из следующего алфавита, и я хочу отправить соответствующий ответ.
Как вы можете заметить, есть некоторая смесь кириллицы и латыни. У меня есть следующий get_queryset
метод:
def get_queryset(self):
SPECIAL_CHARACTERS = [
'Аь', 'Гl', 'Кх', 'Къ', 'Кl', 'Оь', 'Хь', 'Хl', 'Цl', 'Чl', 'Юь', 'Яь'
]
queryset = WordChechenModel.objects.all().order_by('word_chechen')
first_letter = self.request.query_params.get('letter', None)
if first_letter is not None:
if len(first_letter) == 2:
queryset = queryset.filter(
word_chechen__iregex=r"^w+%s" % first_letter)
else:
queryset = queryset.filter(Q(word_chechen__startswith=first_letter) | Q(
word_chechen__startswith=first_letter.upper())).exclude(
word_chechen__startswith__in=SPECIAL_CHARACTERS)
return queryset
В случае, если пользователь отправляет запрос на двойное (смешанное) письмо, я могу отфильтровать его с помощью регулярных выражений, но если пользователь отправляет запрос, скажем, с Аь
или некоторыми из SPECIAL_CHARACTERS
символов, чем у меня проблемы.
В настоящее время я пытался исключить все слова, начинающиеся с одной из букв, определенных в SPECIAL_CHARACTERS
, используя следующий запрос:
queryset = queryset.filter(Q(word_chechen__startswith=first_letter) | Q(
word_chechen__startswith=first_letter.upper())).exclude(
word_chechen__startswith__in=SPECIAL_CHARACTERS)
return queryset
Но это дает мне следующую ошибку:
django.core.exceptions.FieldError: Unsupported lookup 'startswith' for CharField or join on the field not permitted, perhaps you meant s
tartswith or istartswith?
Буду очень признателен за идеи. Скорость обработки запроса важна. Поэтому было бы неплохо получить обзор моего кода одновременно.