And*_*rea 6 python django django-models
我说有一些Django模型
class Foo(models.Model):
class Meta:
abstract = True
class Bar(Foo)
pass
Run Code Online (Sandbox Code Playgroud)
我希望能够找到继承自Foo的所有模型,以便用它们执行任务.它应该很简单,就像
from django.db import models
from myapp.models import Foo
for model in models.get_models():
if issubclass(model, Foo):
do_something()
Run Code Online (Sandbox Code Playgroud)
唉,这不起作用,因为issubclass(Bar, Foo)报告False,可能是由于Django元类的内部工作初始化模型.
有没有办法检查Django模型是否是抽象Django模型的后代?
请不要建议鸭子打字作为解决方案.在这种情况下,我真的想知道是否存在子类关系.
也许像
subclasses = Foo.__subclasses__()
for subclass in subclasses:
# we need to keep looking for subclasses of the subclasses
subclasses += subclass.__subclasses__()
# sometimes we don't care about abstract classes
concrete_subclasses = filter(lambda c: not c._meta.abstract, subclasses)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
629 次 |
| 最近记录: |