【发布时间】:2013-08-27 19:26:21
【问题描述】:
我有一系列看起来像这样的模型:
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,它实际上为迭代示例提供了一些代码,但它仍然给我留下了如何从其父类获取或创建代理类实例的问题。我想我可以重写一堆管理器方法,但我觉得必须有一种更优雅的方式来做到这一点。
【问题讨论】: