インスタンスを渡し:ジャンゴModelFormサブクラスの継承、サブクラスと私はアドレスモデル持って
class Address(models.Model):
line1 = models.CharField(max_length=100)
....
とAddressForm:
class AddressForm(forms.ModelForm):
class Meta:
model = Address
いくつかのモデルは、アドレスフィールドを持つことになりますが、その代わりに、コピーの+ AddressFormのすべてのフィールドを貼り付けると、再利用できるようにAddressFormを拡張したかったのです。具体的には、すべてのフォームフィールドを他のアプリケーションのフォームに貼り付けてコピーし、AddressForm.is_valid()関数を1つしか持たないようにします。私の計画は、このような何かをすることだったので、
例えば、注文は、アドレスを持っています:私はorder/views.py
からOrderFormにインスタンスを渡すとき
class Order:
address = models.ForeignKey(Address, on_delete=models.CASCADE)
class OrderForm(AddressForm):
class Meta:
model = Order
をしかし、私はインスタンスを渡しています注文とAddressFormフィールドのすべての空白として表示:
form = OrderForm(instance=order)
がどのように私はorder.addressフィールドからAddressFormのフィールドを初期化しますか?
class OrderForm(AddressForm):
def __init__(self, *args, **kwargs):
kwargs['instance'] = kwargs['instance'].address
super(OrderForm, self).__init__(*args, **kwargs)
をしかし、それは動作しません:
私はこれを試してみました。
これを行う方法はありますか?または、AddressFormを再利用するより良い方法は?または、これはOrderがAddressのサブクラスだった場合にのみ機能しますか?
乾杯、
驚くばかりの、それは素晴らしいソリューションです。乾杯! –