Django Autocomplete-light Проблема чувствительности к регистру

Я создал базовую настройку для автозаполнения в одной из моих форм. Я использую прямые SQL-запросы для доступа к нужным мне данным и Select2ListView для отправки данных в шаблон. Данные автозаполнения доступны в браузере, но они чувствительны к регистру. Может ли кто-нибудь предложить, что я могу сделать, чтобы автозаполнение стало в чувствительным к регистру?

Я читал об использовании «split_words = True» из класса AutocompleteModel, но понятия не имею, как это сделать.

Например (q = 'ger'):

Командная строка (оператор печати views.py) возвращает

['Алжир', 'Германия', 'Нигер (the), 'Нигерия']

http://127.0.0.1:8000/autocomplete/country-autocomplete?q=ger возвращает

{"results": [{"text": "Алжир", "id": "Алжир"}, {"text": "Нигер (the)", "id": "Нигер (the)"}, {" text": "Нигерия", "id": "Нигерия"}]}

Как видите, Германия видна в данных, которые я возвращаю из представления, но с помощью autocomplete-light выполняется дополнительная фильтрация. Мне нужно изменить autocomplete-light, чтобы фильтрация, которую он выполняет, не учитывала регистр. Любые идеи?

Я использую Python 3.5.2 и последнюю установку pip для autocomplete-light.

Спасибо Стивен

Просмотреть

class CountryAutocomplete(autocomplete.Select2ListView):
    def get_list(self):
    # Only allow authenticated users
    if not self.request.user.is_authenticated():
        return []

    # Read all country names from database
    cursor = connection.cursor()
    cursor.execute('SELECT country_name FROM autocomplete_iso3166;')
    results = cursor.fetchall()

    # Flatten database query into a list
    results = [e for l in results for e in l]

    # Check POST query and filter further
    if self.q:
        # Make query case insensitive
        results = list(filter(lambda k: self.q.casefold() in str(k).casefold(), results))

    print(results)
    return results

Форма

    class VendorForm(forms.ModelForm):
    class Meta:
        model = client
        fields = [
            'vendor_name', 'address5', 'address4', 'address3', 'address2', 'address1',

            ]


    widgets = {
    'address5': autocomplete.ListSelect2(url='country-autocomplete'),
    'address4': autocomplete.ListSelect2(url='state-autocomplete',forward=['address5'])
    }

Модель

class client(models.Model):
    vendor_name = models.CharField(max_length=100)
    user_admin = models.ForeignKey(User, unique=False, null=True, blank=True)
    address1 = models.CharField(null=True, blank=True, max_length=200)
    address2 = models.CharField(null=True, blank=True, max_length=50)
    address3 = models.CharField(null=True, blank=True, max_length=50)
    address4 = models.CharField(null=True, blank=True, max_length=50)
    address5 = models.CharField(null=True, blank=True, max_length=50)

person Stephen    schedule 15.11.2016    source источник


Ответы (1)


if self.q:
    queryset = queryset.filter(country_name__istartswith=self.q)

я означает нечувствительный к регистру. В этом примере используется начало поля.

Если вам нужно точное совпадение без учета регистра, это будет:

country_name__iexact=self.q
person Leah    schedule 26.12.2016
comment
Спасибо за ваш комментарий. Я понимаю, что использование набора запросов может обеспечить нечувствительность к регистру, но я предпочитаю использовать необработанную функцию SQL, и, похоже, она не интегрируется должным образом с autocomplete-light. С тех пор я отключил подсветку автозаполнения Django и в настоящее время использую автозаполнение Ajax для jQuery. - person Stephen; 06.01.2017