私は次のモデルを持っています:
class Model1(models.Model):
field1 = ...
field2 = ...
class Meta:
abstract = True
class Model2(models.Model):
field3 = ...
field4 = ...
class Meta:
abstract = True
上記の具体的な実装があります:
class ConcreteModel1(Model1):
field1_group = ... # foreign key to ConcreteModel3
class ConcreteModel2(Model2):
field3_test = ... # foreign key to ConcreteModel4
私は抽象的なModelFormsを持っています:
class Model1Form(ModelForm):
class Meta:
widgets = { ... }
abstract = True
class Model2Form(ModelForm):
class Meta:
widgets = { ... }
abstract = True
私は具体的なModelFormsを持っています:
class ConcreteModel1Form(Model1Form):
class Meta(Model1Form.Meta):
model = ConcreteModel1
exclude = ('field1_group')
class ConcreteModel2Form(Model2Form):
class Meta(Model2Form.Meta):
model = ConcreteModel2
exclude = ('field3_test')
ご覧のとおり、2 つのモデル フォームの間に類似点があります。問題は、私のテンプレートでは field1 が ConcreteModel1Form に表示されることです (予期される動作)。しかし、別のテンプレートでは field3 は ConcreteModel2Form に表示されません (予期しない動作)。
exclude=('field3_test') をコメントアウトすると、field3 はテンプレートに表示されます (予期される動作) が、field3_test は None で必須フィールドであるため、フォームの検証は失敗します。
私は何が欠けていますか?これは、私が理解できない私のコードの問題のようです。この動作は明らかに一貫性がなく、コードの違いを確認できません。
これをデバッグする方法はありますか? 何が問題なのですか?
基本フォーム クラスから abstract=True を削除しようとしましたが、役に立ちません。
ただし、ConcreteModelForm クラスでフィールド リストを明示的に指定することは機能します。しかし、除外リストがあるケースでは機能するのに、他のケースでは機能しない理由がわかりません。