0

次のモデルを検討してください。

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.namePanama

これは私のモデルフォームです:

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>
4

1 に答える 1