【发布时间】:2011-10-27 10:45:27
【问题描述】:
我有一些 Django 模型,比如说
class Foo(models.Model):
class Meta:
abstract = True
class Bar(Foo)
pass
我希望能够找到从 Foo 继承的所有模型,以便与它们一起执行任务。应该很简单,比如
from django.db import models
from myapp.models import Foo
for model in models.get_models():
if issubclass(model, Foo):
do_something()
唉,这不起作用,因为issubclass(Bar, Foo) 报告False,可能是由于初始化模型的 Django 元类的内部工作。
有没有办法检查 Django 模型是否是抽象 Django 模型的后代?
请不要建议使用鸭子打字作为解决方案。在这种情况下,我真的很想知道是否存在子类关系。
【问题讨论】:
-
问自己同样的问题...经过多次测试和代码自省,我想这似乎是不可能的,因为抽象模型是可调用的,而子对象没有任何属性或适合这种需求的方法。
-
看起来很奇怪...我刚刚在 virtualenv 中创建了一个新的 django 应用程序,您的代码正在运行,我的“do_something()”只是一个“打印模型”,它可以工作。结果:
。你确定你的问题来自 abstract 吗?仅供参考,我正在使用 django 1.3.1 -
也在 Django 1.3.1 上为我工作
-
我必须管理,在一个新项目上它也对我有用。问题一定出在其他地方。抱歉,感谢您的帮助
标签: python django django-models