次のモデルを検討してください。
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 呼び出しで取得したデータを使用して、このモデルにデータを入力しようとしています。次の 2 つのケースで、国にデータを入力するのに問題があります。
国が「United States」の場合 (これは webhook が返すものであり、私はそれを制御できません) - django_countries はこれを認識しないため、新しい Address オブジェクトを作成する前に「United States」を USA に変更する if 条件を追加しましたただし、「パナマ」など、国が米国でない場合は、次のようにしてモデルに直接入力します。
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>