2017-11-30 14 views
0

私はいくつかのスレッドを読み、djangoが複数の抽象クラスを持つことができることを確かめています。しかし、私が見たほとんど全てのサンプルがある...同じ親だが異なる子を持つ抽象クラスからの多重継承? django

class AbsOne(models.Model): 
    pass 
class AbsTwo(models.Model): 
    pass 

class AbsThree(AbsOne, AbsTwo): 
    pass 

しかし、私は何かのような...

class AbsOne(models.Model): 
    pass 

class AbsTwo(AbsOne): // this actually inheritance AbsOne 
    pass 
class AbsThree(AbsOne): // this inheritance AbsOne 
    pass 

を持っている場合、私は両方AbsTwo, AbsThreeを継承する必要がありますが、これらの二つでも継承されている場合はどう同じ親に

class AbsFour(AbsTwo, AbsThree): 
    pass 

これは競合や追加フィールドなしで実行可能ですか?

ありがとうございます。

+0

Djangoの複数モデルの継承はfubarです。あなたは十分な決断で一緒に物事をハックすることができますが、自分自身の多くのトラブルを保存し、それを使用しないでください。 (一方、Python MIは、美しく動作します)。 – thebjorn

答えて

1

Pythonのサブクラス化と同様に、 へのDjangoモデルは、複数の親モデルから継承できます。通常のPython 名前解決規則が適用されることに注意してください。特定の という名前(Metaなど)が表示される最初の基本クラスが使用されます。たとえば の場合、複数の親にMetaクラスが含まれている場合は、最初に のみが使用され、その他はすべて無視されます。

https://docs.djangoproject.com/en/1.11/topics/db/models/#multiple-inheritance

ことは可能だが、それは(親クラスとメタクラスでオーバーライドフィールド)のようないくつかの制限があり、DjangoのORMまたはクラスのモデルの方法は、通常のPythonの継承よりもアーキテクチャで少し異なっています、ドキュメンテーションが何を言及しているのか注意深く読んで、それを簡単に保つようにしてください ミックスインを継承するすべてのクラスに 特定の余分なフィールドやメソッドを追加:これは便利です

...主なユースケースは、「ミックスイン」クラスです。あなたが特定の情報を編集

から来ている アウトを仕事に苦労する必要はありませんように、シンプルかつできるだけ 率直としてあなたの継承階層を保つようにしてください:別の引用:)

を追加しました
関連する問題