考虑这个模型:
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>
- 美国的问题是什么:我认为这是您定制国家名称的最佳选择,如这里所述
from django.utils.translation import gettext_lazy as _
COUNTRIES_OVERRIDE = {
'NZ': _('Middle Earth'),
'AU': None,
'US': {'names': [
_('United States of America'),
_('America'),
],
}
- 你试过这样使用
CountrySelectWidget
吗?如果没有,你能试着说它对你有效吗
from django_countries.widgets import CountrySelectWidget
class PersonForm(forms.ModelForm):
class Meta:
model = models.Person
fields = ('name', 'country')
widgets = {'country': CountrySelectWidget()}