Django Countries - невозможно предварительно выбрать нужную страну в форме редактирования

Рассмотрим эту модель:

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. У меня возникают проблемы с заполнением страны в двух случаях:

Когда страна - "United States" (это то, что возвращает webhook, я не контролирую это) - django_countries не распознает это, поэтому я добавил условие if для изменения "United States" на USA перед созданием нового объекта Address, но, когда страна не United States, например, "Panama", я ввожу ее непосредственно в модель, делая следующее:

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

Все работает нормально, но когда я пытаюсь отредактировать форму "Адрес", поле страны пустое, оно не выбирает "Панаму" из опций. Я знаю, что поле country этого экземпляра Address является объектом страны, потому что я могу сделать 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()}
Вернуться на верх