Чувствительность к случаю автозаполнения Django

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

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

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

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

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

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

{"results": [{"text": "Алжир", "id": "Алжир"}, {"text": "Niger (the)", "id": "Niger (the)"}, {"text": "Nigeria", "id": "Nigeria"}]}

Как вы можете видеть, Германия видна в данных, которые я возвращаю из представления, но при автозаполнении происходит некоторая дополнительная фильтрация. Мне нужно изменить 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)

1 ответ

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

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

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

country_name__iexact=self.q
Другие вопросы по тегам