0

自分のフォームの1つでオートコンプリートライトの基本設定を作成しました。私は必要なデータにアクセスするために直接SQLクエリを使用しており、Select2ListViewはテンプレートにデータを送信します。オートコンプリートデータはブラウザで利用できますが、大文字と小文字の区別です。誰かが私がオートコンプリートライトをケースにするためにできることを提案してもらえますかに敏感ですか?Djangoオートコンプリートライトケースの感度問題

私は 'split_words = True'をAutocompleteModelクラスから使用することについて読んだことがありますが、これを行う方法はわかりません。例えば

(Q = 'GER'):

コマンドプロンプト(views.py print文は)

を返す[ 'アルジェリア'、 'ドイツ'、「ニジェール() 'ナイジェリア']

http://127.0.0.1:8000/autocomplete/country-autocomplete?q=ger戻り

{"results": "{" text ":"アルジェリア "、" id ":"アルジェリア "}、{" text ":"ニジェール "、" id ":"ニジェール "}、{ 「テキスト」:「ナイジェリア」、「ID」:「ナイジェリア」}]}

あなたが見ることができるように、ドイツは私がビューから戻っていたデータに表示されますが、起こっていくつかの追加のフィルタリングがありますオートコンプリートライトでオートコンプリートライトを変更する必要があるため、フィルタリングは大文字と小文字を区別しません。何か案は?

私はPython 3.5.2を実行していますが、最新の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
if self.q: 
    queryset = queryset.filter(country_name__istartswith=self.q) 

iは大文字と小文字を区別しません。この例では、フィールドの先頭を使用します。

あなたは完全一致、大文字と小文字を区別しないをしたい場合には、次のようになります。あなたのコメントについて

country_name__iexact=self.q 
+0

感謝。クエリーセットを使用すると大文字小文字の区別ができなくなる可能性がありますが、私は生のSQL関数を使用することを好みます。これはオートコンプリートライトと正しく統合されていないようです。私は無効なDjangoのオートコンプリートライトがあるので、現在は "Ajax AutoComplete for jQuery"を使用しています。 – Stephen