我在其中一个表单上创建了自动完成灯的基本设置。我使用直接SQL查询来访问我需要的数据,并使用Select2ListView将数据发送到模板。自动填充数据在浏览器中可用,但区分大小写。有人可以建议我可以做些什么来使自动完成灯变得 敏感吗?
我读过有关使用' split_words = True'来自AutocompleteModel类,但我不知道如何做到这一点。
例如(q =' ger'):
命令提示符(views.py print statement)返回
['阿尔及利亚'' 德国','尼日尔(尼日利亚)'尼日利亚']
http://127.0.0.1:8000/autocomplete/country-autocomplete?q=ger返回
{"结果":[{" text":" Algeria"," id":" Algeria" },{" text":" Niger(the)"," id":" Niger(the)"},{& #34;文字":"尼日利亚"," id":"尼日利亚"}]}
正如您所看到的,德国在我从视图中返回的数据中可见,但是自动完成光还会进行一些额外的过滤。我需要更改autocomplete-light,以便它执行的过滤不区分大小写。有什么想法吗?
我正在运行Python 3.5.2,以及autocomplete-light的最新pip安装。
由于 斯蒂芬
查看
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)
答案 0 :(得分:0)
if self.q:
queryset = queryset.filter(country_name__istartswith=self.q)
我的意思是不区分大小写。此示例使用字段的开头。
如果您希望完全匹配不区分大小写,那么它将是:
country_name__iexact=self.q