これは重複しているように聞こえるかもしれませんが、そうではないと思います。
質問者がそこで行ったことと少し似たようなことをする必要があります: django model polymorphism with proxy inheritance
私の親は一連のメソッドを実装する必要があります。それらを MethodA()、MethodB() と呼びましょう。これらのメソッドは直接使用されることはなく、常に子モデルを介して呼び出されます (ただし、抽象クラスはさまざまな理由から使用できません)。
しかし、これはよりトリッキーになるところです:
各子モデルは特定のモジュール (moduleA、moduleB) から継承し、それらはすべて同じメソッド名を実装しますが、何かが異なります。呼び出しは親モデルを通じて行われ、フィールドの値に応じて子モデルにリダイレクトされます
あまり明確ではないと思うので、理解に役立つ疑似コードをいくつか示します
from ModuleA import CustomClassA
from ModuleB import CustomClassB
class ParentModel(models.Model):
TYPE_CHOICES = (
('ChildModelA', 'A'),
('ChildModelB', 'B'),
)
#some fields
type = models.CharField(max_length=1, choices=TYPE_CHOICES)
def __init__(self, *args, **kwargs):
super(ParentModel, self).__init__(*args, **kwargs)
if self.type:
self.__class__ = getattr(sys.modules[__name__], self.type)
def MethodA():
some_method()
def MethodB():
some_other_method()
class ChildModelA(ParentModel, CustomClassA):
class Meta:
proxy = True
class ChildModelB(ParentModel, CustomClassB):
class Meta:
proxy = True
ModuleA では:
class CustomClassA():
def some_method():
#stuff
def some_other_method():
#other stuff
ModuleB で:
class CustomClassB():
def some_method():
#stuff
def some_other_method():
#other stuff
現時点での問題は、クラスの変更は機能するが、ChildModelA または B から継承されないことです。
これは可能ですか?はいの場合、どのように機能させることができますか? いいえの場合、繰り返しをあまり行わずにエレガントに行うにはどうすればよいですか?