Django - 获取基本模型的实例作为相应的代理模型

时间:2012-08-07 20:18:49

标签: python django-models

我有一个基本的Django模型,以及将其子类化的代理模型。它们会覆盖所有方法。我需要遍历基本模型的所有实例(即for i in BaseModel.objects.all()),但能够调用其相应代理类的方法,而不是基类中声明的占位符方法。

我该如何处理?我实际上有一个模型字段,可以确定哪个代理模型对应于每个特定实例。也许我可以利用它并以某种方式将基类转换为子类?我很茫然。

编辑:我看过this question,并设法通过写信self.__class__来改变课程。但是,与Django一起使用是否安全?

1 个答案:

答案 0 :(得分:2)

proxymodels = {"Foo": FooModel, "Bar": BarModel}    

for o in BaseModel.objects.all():
    proxymodels[o.type].method_name(o, *args, **kwargs)

在代理模型(类)上调用方法,将BaseModel实例作为第一个参数传递,并传递您想要传递的任何其他参数。这样就可以调用这些方法,就好像它们是在代理模型的实例上调用一样。

PS:重新分配自我.__ class__对我来说似乎非常苛刻。