Чувствительность к случаю автозаполнения 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