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