我有一个带有映射到cities_light.city的location字段的模型,我正在使用一个自动完成字段,它允许用户输入他们所在的城市,并让它自动完成到正确/有效的location模型实例。
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.我猜我需要像下面实现的CityAutocomplete一样扩展AutocompleteModelBase,但我不确定如何扩展,也找不到可用的示例。
class CityAutocomplete(autocomplete_light.AutocompleteModelBase):
search_fields = ('search_names',)https://github.com/yourlabs/django-cities-light/blob/master/cities_light/contrib/autocompletes.py
谢谢你的帮助,如果我的问题格式不好,我很抱歉。
发布于 2013-04-12 01:36:22
您的问题并不是特定于django-autocomplete-light。你所做的是没有机会工作的,原因如下:
ForeignKey的表单字段默认是一个ModelChoiceField,ModelChoiceField接受ModelChoiceField.queryset中模型的PK值,默认情况下是TheModel.objects.all(),因此,使用文本小部件选择像"Lisboa“和”马德里“这样的几个城市将如下所示:
<input type="text" value="Lisboa, Madrid" name="location" />这意味着表单将发布{'location': 'Lisboa, Madrid'}。虽然这对CharField来说很好,但对于像{'location': [3,5]}这样的ModelMultipleChoiceField是行不通的,其中3是Lisboa的pk,5是马德里的pk。
以同样的方式,ModelChoiceField期望{'location': 3},而autocomplete_light.ChoiceWidget能够做到这一点。
要解决此问题,请使用ChoiceWidget而不是TextWidget。我已经澄清了这个in the tutorial,我希望它现在更好。
https://stackoverflow.com/questions/15914904
复制相似问题