2016-11-15 38 views
0

我已經創建了一個自動完成光基本設置上的我的形式之一。我使用直接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) 

回答

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

我的意思是不區分大小寫。這個例子使用字段的開始。

如果你想完全匹配不區分大小寫這將是:

country_name__iexact=self.q 
+0

感謝您的評論。我明白,使用查詢集可能會允許大小寫敏感,但我更喜歡使用原始SQL函數,而且這似乎並未與自動完成燈正確集成。我自從禁用了Django自動完成燈並且我目前使用「Ajax自動完成for jQuery」。 – Stephen