Django自动完成灯和城市灯无效choi

2024-09-30 01:26:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模型,它有一个映射到城市的位置字段_光明城市我使用了一个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

谢谢你的帮助,如果我的问题格式不好,我很抱歉。在


Tags: 实例模型truecityfieldssearchmodelslocation
1条回答
网友
1楼 · 发布于 2024-09-30 01:26:05

您的问题并不特定于django自动完成灯光。你所做的没有工作的机会,原因如下:

  • ForeignKey类似的location的表单字段默认为ModelChoiceField
  • ModelChoiceField接受的值是ModelChoiceField.queryset中模型的pk,默认情况下是TheModel.objects.all()
  • TextWidget小部件is a ^{}
  • 一个^{} widget is just an ^{}
  • 在表单提交时,<input type="text" />的值直接发送到服务器。在

因此,用一个文本小部件选择像“里斯本”和“马德里”这样的两个城市会像:

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

这意味着表单将发布{'location': 'Lisboa, Madrid'}。虽然这对一个CharField是好的,但它对一个ModelMultipleChoiceField是不起作用的,它会期待类似{'location': [3,5]}的东西,其中3是里斯本的pk,5是马德里的pk。在

同样,一个ModelChoiceField会期望{'location': 3},而{}能够做到这一点。在

要解决此问题,请使用ChoiceWidget而不是TextWidget。我已经澄清了这一点,希望现在更好。在

相关问题 更多 >

    热门问题