我有一个返回django模型类的函数,并希望在我的app/models/__init__.py
中导入它们。
我的功能稍微修改了这个dynamic model exemple (Django Wiki)。它克隆一个模型并返回一个<class 'django.db.models.base.ModelBase'>
,一个稍微修改过的“阴影模型”。
就像人们会做的那样(app/models/__init__.py
)from 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.py
(SHADOW_MODELS = (('app.module1.module_a', 'ClassName1'),)
)中定义的元组元组创建表。
它确实有效,但我被要求在/app/models/__init__.py
中导入我的动态模型,而不是仅为我的动态模型运行单独的命令。
答案 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
以从其他模块导入。