私はこのように見える一連のモデルを持っている:彼らの基本クラスからDjangoのプロキシモデルのインスタンスを作成
class Analysis(models.Model):
analysis_type = models.CharField(max_length=255)
def important_method(self):
...do stuff...
class SpecialAnalysis(Analysis):
class Meta:
proxy = True
def important_method(self):
...something different...
これは、すべてのかなり標準です。しかし、私がしたいのは、analysis_type
フィールドの値に基づいて、Analysis
モデルを自動的にプロキシモデルに変換することです。たとえば、次のようなコードを書くことができます:
>>> analysis = Analysis.objects.create(analysis_type="nothing_special")
>>> analysis.__class__
<class 'my_app.models.Analysis'>
>>> analysis = Analysis.objects.create(analysis_type="special")
>>> analysis.__class__
<class 'my_app.models.SpecialAnalysis'>
>>> analysis = Analysis.objects.get(pk=2)
>>> analysis.__class__
<class 'my_app.models.SpecialAnalysis'>
>>> # calls the ``important_method`` of the correct model
>>> for analysis in Analysis.objects.all():
... analysis.important_method()
これはリモートでも可能ですか?同様の質問が繰り返しの例のコードを実際に与えるhereと尋ねられましたが、それでも親からプロキシクラスのインスタンスを取得または作成する方法の問題が残っています。私はちょうどマネージャメソッドの束を無効にすることができると思うが、私はそれを行うよりエレガントな方法が必要であるように感じる。
これは間違いなく、私が試していたクレイジーなものよりもきれいです。ご協力いただきありがとうございます! –
あなたの方法は失敗することはまずありませんが、手動マッピングは正確に拡張できません。将来の訪問者は、Model .__サブクラス__()メソッドを使用してプロキシモデルのリストを取得し、必要に応じてそれらの一部またはすべてを動的にクエリする方がよいでしょう。 – Ivan