我已經創建了一個自動完成光基本設置上的我的形式之一。我使用直接SQL查詢來訪問我需要的數據,並使用Select2ListView將數據發送到模板。自動完成數據可在瀏覽器上,但它是區分大小寫。有人可以請建議我可以做什麼,使自動完成光變爲情況在敏感?Django的自動完成光大小寫敏感性問題
我讀到有關使用「split_words = TRUE」從AutocompleteModel類,但我不知道如何做到這一點。
例如(Q = 'GER'):
命令提示(views.py打印語句)返回
[ '阿爾及利亞', '德國',「尼日爾(下) 「尼日利亞]
http://127.0.0.1:8000/autocomplete/country-autocomplete?q=ger回報
{ 「結果」:[{ 「文本」: 「阿爾及利亞」, 「ID」: 「阿爾及利亞」},{ 「文本」: 「尼日爾(下)」, 「ID」: 「尼日爾(下)」},{ 「text」:「Nigeria」,「id」:「Nigeria」}]}
正如您所見,德國在我從視圖返回的數據中可見,但是還有一些額外的過濾正在進行通過自動完成燈光。我需要更改自動完成燈,以便它執行的過濾不區分大小寫。有任何想法嗎?
我運行的Python 3.5.2,而最新的點子安裝自動完成光。
感謝 斯蒂芬
查看
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)
感謝您的評論。我明白,使用查詢集可能會允許大小寫敏感,但我更喜歡使用原始SQL函數,而且這似乎並未與自動完成燈正確集成。我自從禁用了Django自動完成燈並且我目前使用「Ajax自動完成for jQuery」。 – Stephen