Django国家-无法在编辑表单中预先选择正确的国家



考虑这个模型:

class Address(models.Model):
line1 = models.CharField(max_length=255, db_index=True, blank=True, null=True)
city = models.CharField(max_length=255, db_index=True, blank=True, null=True)
state = models.CharField(max_length=255, db_index=True, blank=True, null=True)
postcode = UppercaseCharField(max_length=64, blank=True, db_index=True, null=True)
country = CountryField(db_index=True, blank=True, null=True)

我正试图使用通过webhook调用获得的数据来填充这个模型。在两种情况下,我在全国人口中遇到了困难:

当国家是";美国";(这就是webhook返回的内容,我无法控制它(-djang_countries无法识别这一点,所以我添加了一个if条件来更改";美国";在创建新地址对象之前发送到美国,但是当该国家不是美国时,例如"美国";Panama";,我通过以下操作将其直接填充到模型中:

country = request.POST.get('country')    # returns something like "Panama"
Address.objects.create(line1=line1, city=city, state=state, country=country)

这很好,除了当我试图编辑地址表单时,国家/地区字段是空白的,它不是预先选择的"巴拿马";从选项中选择。我知道这个Address实例的country字段是一个country对象,因为我可以执行address_form.instance.country,它会输出Pa,如果我执行address_form.instance.country.name,它就会输出Panama。那么,为什么表格中的国家字段没有预先选择正确的国家,为什么它显示为空白呢?

这是我的模型形式:

class NewAddressForm(ModelForm):
class Meta:
model = Address
fields = ['line1', 'city', 'state', 'postcode', 'country']
def __init__(self, *args, **kwargs):
super(NewAddressForm, self).__init__(*args, **kwargs)

这是我的模板[在这里只显示国家字段]

<div class="col-md-5">|
{% comment %}
COUNTRYCode: {{address_form.instance.country.code}} ---> Outputs Pa in case of Panama
COUNTRYName: {{address_form.instance.country.name}} ---> Outputs Panama in case of Panama
{% endcomment %}
<div class="form-group">
<label>{{address_form.country.label}}</label>
{% render_field address_form.country class="form-control m-b" name="country" id="country_dropdown"%}
</div>
</div>
  1. 美国的问题是什么:我认为这是您定制国家名称的最佳选择,如这里所述
from django.utils.translation import gettext_lazy as _
COUNTRIES_OVERRIDE = {
'NZ': _('Middle Earth'),
'AU': None,
'US': {'names': [
_('United States of America'),
_('America'),
],
}
  1. 你试过这样使用CountrySelectWidget吗?如果没有,你能试着说它对你有效吗
from django_countries.widgets import CountrySelectWidget
class PersonForm(forms.ModelForm):
class Meta:
model = models.Person
fields = ('name', 'country')
widgets = {'country': CountrySelectWidget()}

最新更新