在`__init __。py`中导入动态生成的模型类

时间:2013-03-14 11:34:05

标签: python django python-import

我有一个返回django模型类的函数,并希望在我的app/models/__init__.py中导入它们。

我的功能稍微修改了这个dynamic model exemple (Django Wiki)。它克隆一个模型并返回一个<class 'django.db.models.base.ModelBase'>,一个稍微修改过的“阴影模型”。

就像人们会做的那样(app/models/__init__.pyfrom a import test1,我想做的事情如下:

from c import modeltocopy
from b import dynamic_model('ShadowModel', app_label='fake',fields=modeltocopy._meta.fields)`

我想这样做是为了在动态模型的替代数据库中创建表。

这样的事情可能吗?

我目前正在使用的解决方案是一个管理命令,它是django/core/management/commands/syncdb.py的修改,它根据settings.pySHADOW_MODELS = (('app.module1.module_a', 'ClassName1'),))中定义的元组元组创建表。
 它确实有效,但我被要求在/app/models/__init__.py中导入我的动态模型,而不是仅为我的动态模型运行单独的命令。

1 个答案:

答案 0 :(得分:1)

您无法导入函数调用的结果。相反,您可以先导入该函数,然后调用它在模块的命名空间中创建模型类:

from c import modeltocopy
from b import dynamic_model as dyn_model_factory

ShadowModel = dyn_model_factory('ShadowModel', app_label='fake', fields=modeltocopy._meta.fields)

然后读取生成的dynamic_model以从其他模块导入。