Я создал базовую настройку для автозаполнения в одной из моих форм. Я использую прямые 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)