我有一个模型类 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
