0

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

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

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

4

1 回答 1

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

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

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

PS:重新分配 self.__class__ 对我来说似乎很hackish。

于 2012-08-07T21:46:16.240 回答