次のような一連のモデルがあります。
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
の値に基づいてモデルをプロキシ モデルに自動的に変換することです。analysis_type
たとえば、次のようなコードを記述できるようになりたいと考えています。
>>> 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()
これはリモートでも可能ですか?同様の質問がここで尋ねられました。実際には、反復例のコードがいくつか示されていますが、親からプロキシ クラスのインスタンスを取得または作成する方法についてはまだ疑問が残ります。一連のマネージャー メソッドをオーバーライドすることもできると思いますが、それを行うにはもっとエレガントな方法が必要だと思います。