6

私はdjangoプロジェクトでautocomplete_lightの実用的な実装を行っており、ドロップダウンでcitys_lightから値を取得しています。これにより、フォーム送信時にdbのフィールドに外部キーが正しく保存されます。フォームに再度アクセスすると、オートコンプリート テキスト フィールドが保存されている値にデフォルト設定され、理想的にはプレーン テキストの値と「X」ボタン (既に組み込まれているように) が表示されます。現在、プレースホルダー テキストと空白のテキスト フィールドが表示されています。フォームに保存されているその他の値 (ここでは省略) は、フォームに再度アクセスしたときに正しくデフォルト設定されています。保存された値を表示するウィジェットをトリガーするには、ここに何を追加する必要がありますか? これが私のコードです:

フォーム.py

class UserProfileForm(autocomplete_light.GenericModelForm):
    location = autocomplete_light.GenericModelChoiceField(
        widget=autocomplete_light.ChoiceWidget(
            autocomplete='AutocompleteItems',
            autocomplete_js_attributes={'placeholder':'City, State, Country',
                                        'minimum_characters': 3})
    )
    class Meta:
        model = UserProfile
        fields = ['location']

models.py

class UserProfile(models.Model):
    user = models.ForeignKey(
        User,
        unique=True
    )
    location = models.ForeignKey(
        City,
        blank=True,
        null=True
    )

autocomplete_light_registry.py

class AutocompleteItems(autocomplete_light.AutocompleteGenericBase):
    choices = (
        City.objects.all(),
    )
    search_fields = (
        ('search_names',),
    )
autocomplete_light.register(AutocompleteItems)
4

1 に答える 1

4

この投稿が1年以上前のものであることは知っていますが、答えは誰かを助けるかもしれません. フォーム init の ChoiceWidget に extra_context パラメーターを追加することで、オートコンプリート ライト ウィジェットを設定することができました。

def __init__(self, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)
    if self.initial.get('city', None):
        cityPK = self.initial['city']
        city = cities_light.models.City.objects.get(pk=cityPK)
        self.fields['city_name'].widget=autocomplete_light.ChoiceWidget('CityAutocomplete', extra_context={'values':[cityPK], 'choices':[city]})
于 2015-01-16T14:58:51.267 に答える