Skip to main content
 首页 » 编程设计

python之如何在 Django 继承模型中调用正确的方法

2024年08月30日28shanyou

我有一个模型类 B 和 C,它们实现了方法 f 并继承自模型类 A。 我想在所有 A 实例(B 和 C)上调用函数 f。 为什么

for a in A.objects.all(): 
    a.f() 

没有按预期工作?

请您参考如下方法:

那是因为默认的 django 管理器不管理多态性。所以当你这样做的时候

for a in A.objects.all(): 
    … 

您所有的a 对象都是A 类型,没有B 或C 类型。

您需要使用 django-model-utils应用程序,它是 select_subclasses 工具:

for a in A.objects.select_subclasses(): 
    # type(a) returns the correct subclass