我有一个模型,它有一个映射到城市的位置字段_光明城市我使用了一个autocomplete字段,它允许用户输入他们所在的城市,并将其自动完成到正确/有效的位置模型实例。在
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模型实例的主键引起的。在
^{pr2}$我猜我需要像下面实现的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
谢谢你的帮助,如果我的问题格式不好,我很抱歉。在
您的问题并不特定于django自动完成灯光。你所做的没有工作的机会,原因如下:
ForeignKey
类似的location
的表单字段默认为ModelChoiceFieldModelChoiceField
接受的值是ModelChoiceField.queryset
中模型的pk,默认情况下是TheModel.objects.all()
TextWidget
小部件is a ^{<input type="text" />
的值直接发送到服务器。在因此,用一个文本小部件选择像“里斯本”和“马德里”这样的两个城市会像:
这意味着表单将发布
{'location': 'Lisboa, Madrid'}
。虽然这对一个CharField
是好的,但它对一个ModelMultipleChoiceField
是不起作用的,它会期待类似{'location': [3,5]}
的东西,其中3是里斯本的pk,5是马德里的pk。在同样,一个}能够做到这一点。在
ModelChoiceField
会期望{'location': 3}
,而{要解决此问题,请使用
ChoiceWidget
而不是TextWidget
。我已经澄清了这一点,希望现在更好。在相关问题 更多 >
编程相关推荐