2

組み込まれたオートコンプリート ライトを django プロジェクトに正常に設定しました。フォームで使用していますが、期待どおりに機能しています。https://django-autocomplete-light.readthedocs.org/en/docs_rewrite/quick.html?highlight=quickのクイック スタート チュートリアルに従いました。

ただし、 autocomplete_light.Choice ウィジェットを使用しているフォーム フィールドでは、フォーム フィールド名が変更されています。具体的には、入力フォームのタグ名と思われるものの末尾に「-autocomplete」が追加されています。

ここに私のフォームがあります:

class SearchForm(forms.Form):
    #flight_from = forms.CharField(max_length=200, required=False, widget=forms.TextInput)
    flight_from = forms.ModelChoiceField(Airport.objects.all(),
        widget=autocomplete_light.ChoiceWidget('AirportAutocomplete'))
    flight_to = forms.CharField(max_length=200, required=False, widget=forms.TextInput)
    start_date = forms.DateField(required=False, input_formats='%Y-%m-%d')
    end_date = forms.DateField(required=False, input_formats='%Y-%m-%d')
    max_price = forms.FloatField(required=False, widget=forms.TextInput)

ここに私の autocomplete_light_registry.py ファイルがあります:

import autocomplete_light

from models import Airport

class AirportAutocomplete(autocomplete_light.AutocompleteModelBase):
    search_fields = ['name_city_country_code']

autocomplete_light.register(Airport, AirportAutocomplete)

これは、レンダリング後のフォーム フィールドの外観です。

<label for="id_flight_from">Flight from:</label>
<span id="id_flight_from-wrapper" class="autocomplete-light-widget flight_from single" data-autocomplete-name="flight_from" data-autocomplete-placeholder="Other model name ?" data-autocomplete-choice-selector="[data-value]" data-autocomplete-url="/autocomplete/AirportAutocomplete/" data-name="flight_from" data-bootstrap="normal" data-max-values="1" data-widget-ready="1">
<span id="id_flight_from-deck" class="deck div"> </span>
<input id="id_flight_from_text" class=" autocomplete" type="text" value="" name="flight_from-autocomplete" autocomplete="off" placeholder="Other model name ?">
<select id="id_flight_from" class="value-select" multiple="multiple" name="flight_from" style="display:none"> </select>
<span class="remove div" style="display:none"> X </span>
<span class="choice-template div" style="display:none">
</span>
<div style="clear: both"></div>

ご覧のとおり、入力タグ名は「flight_from-autocomplete」ですが、「flight_from」のままにしたいと思います。autocomplete_light_registry.py ファイルで autocomplete_js_attributes と widget_attributes を次のように指定しようとしました。

autocomplete_js_attributes={'name': 'flight_from'}

widget_js_attributes = {'name': 'flight_from'}

しかし、その入力タグ名属性は変更されていません。この属性を設定する方法や、ウィジェットのレンダリング機能をオーバーライドする方法があれば教えてください。

4

1 に答える 1

0

ご覧のとおり、入力タグ名は「flight_from-autocomplete」ですが、「flight_from」のままにしたいと思います。

次の理由により、これは機能しません。

  • 非表示<select>には nameflight_fromがあり、モデル pk が値として含まれます。
  • <input>オートコンプリートの目的でのみここにあり、その値はFormオブジェクトに送信されることを意図していないため、-autocomplete名前にサフィックスが含まれています。

あなたはnameオートコンプリート入力の属性を変更しようとしたと言っていますが、なぜそれをしようとしているのかは言っていません。だから私があなたのためにできることはこれ以上ありません。

于 2013-11-17T11:30:33.573 に答える