2012-04-30 9 views
0

Djangoでは、抽象モデルクラスを作成して実際の派生クラスを作成すると、これらのクラスのみが関連付けられたテーブルを持ち、抽象クラス自体はインスタンス化できません。もし、abstract = Trueメタ情報を削除すると、実際のテーブルがベースクラスに対して作成されますが、そうすることで、クライアントコードはベースクラスのオブジェクトを作成することができます。djangoの抽象モデルクラスですが、テーブルがあります

基本クラスに関連付けられているテーブルを持ちながら、クライアントコードが派生クラスを常にインスタンス化するように強制する方法はありますか?

+0

ここでは大声で考えていますが、派生クラスが継承する「テンプレート」クラスを抽象クラスとして継承することができます。共有抽象クラスを使用して、モデルを構築してテーブルを作成します。あなたの "ベース"クラスは、追加のフィールドを宣言する必要はありません。 – Brandon

+0

@Brandon:抽象クラスを使用する場合は、汎用リレーションを使用する必要があります。一般的な関係に頼らなくても、その内容を指す外部キーを定義したいので、ベースクラスにテーブルを持たせたいですが、偶然にも純粋な基底クラスをインスタンス化することは望ましくありません。 –

+0

Hmm。あなたがしなければならないことを達成するための最良の方法が何であるかはわかりません。 – Brandon

答えて

0

Noneを返すか、NotImplementedをクラス内で__new__に上げてみるといいでしょう。それが他の何かに影響を与えるかどうかはわかりません。

関連する問題