2

私は会社のモデルを持っています:

class Company(models.Model):
    companyId = models.IntegerField(unique=True, blank = True, null = True )
    address = models.ForeignKey(Address, blank = True, null = True )
    ...

およびアドレス モデル:

class Address(models.Model):
    address1 = models.CharField (max_length=300, blank = True, null = True)
    ...

外部キーの編集可能なフォームを作成する必要があり、これが私のコードです:

class CompanyForm(forms.ModelForm):
    address = forms.CharField(label='Address', max_length=500, required=False)
    ...

そのフォームのビューは

<div class="control-group">
    <label class="control-label" for="id_address">{{ form.address.label }}</label>
   <div class="controls">
            {{ form.instance.address.address1 }}
  </div>
</div>

アドレスとラベルは表示されますが、フィールドを変更できません。実際にフィールドを編集可能にするアプローチは何でしょうか? どんな助けでも大歓迎です!

4

1 に答える 1

1

文字列フィールドから fk にデータを保存するには、フォーム保存メソッドをオーバーライドする必要があります。__init__また、メソッドで初期状態を文字列アドレス フィールドに設定できます。

class CompanyForm(forms.ModelForm):
    s_address = forms.CharField(label='Address', max_length=500, required=False)

    def __init__(self, *args, **kwargs):
        super(CompanyForm, self).__init__(*args, **kwargs)
        self.fields['s_address'].initial = self.instance.address.address1

    def save(self, commit=True):
        model = super(CompanyForm, self).save(commit=False)
        saddr = self.cleaned_data['s_address']
        if saddr:
            if model.address:
                model.address.address1 = saddr
                model.address.save()
            else:
                model.address = Address.objects.create(address1=saddr)
                # or you can try to look for appropriate address in Address table first
                # try:
                #     model.address = Address.objects.get(address1=saddr)
                # except Address.DoesNotExist:
                #     model.address = Address.objects.create(address1=saddr)

        if commit:
            model.save()

        return model

    class Meta:
        exclude = ('address',) # exclude form own address field

テンプレート:

<div class="control-group">
    {{ form.s_address }}
</div>
于 2013-11-07T18:53:35.237 に答える