0

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

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 クラスでフィールド リストを明示的に指定することは機能します。しかし、除外リストがあるケースでは機能するのに、他のケースでは機能しない理由がわかりません。

4

1 に答える 1

1

除外フィールド リストに末尾のコンマを追加してみてください。結果をお知らせください。

exclude = ('field1_group', )
于 2012-11-14T06:50:27.997 に答える