Django autocomplete_light和cities_light - 选择无效

时间:2013-04-10 00:26:02

标签: python django django-autocomplete-light

我有一个带有位置字段的模型,该字段映射到cities_light.city,我正在使用一个自动填充字段,允许用户输入他们的城市并将其自动填充到正确/有效的位置模型实例。

class Profile(models.Model):
    location = models.ForeignKey(City, blank=True, null=True)

class ProfileForm(ModelForm):

    class Meta:
        model = Profile
        fields = ('location')
        widgets = {
            'location': autocomplete_light.TextWidget(CityAutocomplete, autocomplete_js_attributes={'placeholder':'City, Country', 'minimum_characters':4})
        }

表单字段的工作方式与广告完全相同,并显示自动填充选项列表。但是,当我保存表单/模型时,我得到验证错误,这似乎是由于字段未被转换为City模型实例的主键而引起的。

Select a valid choice. That choice is not one of the available choices.

我猜我需要扩展AutocompleteModelBase,就像下面实现的CityAutocomplete一样,但我不确定如何,我一直无法找到一个有效的例子。

class CityAutocomplete(autocomplete_light.AutocompleteModelBase):
    search_fields = ('search_names',)

https://github.com/yourlabs/django-cities-light/blob/master/cities_light/contrib/autocompletes.py

感谢任何帮助,如果我的问题格式不正确,我很抱歉。

1 个答案:

答案 0 :(得分:3)

您的问题并非特定于django-autocomplete-light。你正在做什么没有机会工作,这就是原因:

因此,使用文本小部件选择“Lisboa”和“Madrid”等几个城市将会显示为::

<input type="text" value="Lisboa, Madrid" name="location" />

这表示该表单将发布{'location': 'Lisboa, Madrid'}。虽然这对CharField有好处,但它不适用于ModelMultipleChoiceField这样的{'location': [3,5]},其中3将是Lisboa的pk,5将是马德里的pk。< / p>

以同样的方式,ModelChoiceField可以{'location': 3} autocomplete_light.ChoiceWidget ChoiceWidget

要解决此问题,请使用TextWidget代替{{1}}。我澄清了这一点in the tutorial我希望现在好一点。