我正在尝试在Django项目文件夹之外定义一些Django模型(我只是在使用没有Web应用程序功能的Django ORM功能),然后将它们导入到Django项目中应用程序的models.py中。
我知道可以通过创建模型包,包含多个定义模型的模块并将其导入__init__.py
来“拆分” models.py,所以我认为这样做的方式相同。
目录结构类似于:
- root
- tasks
- taskA
- models.py
- taskB
- models.py
- orm
- apps
- app1
- models.py
- base_models.py
- apps.py
- app2
- models.py
- base_models.py
- apps.py
- manage.py
- settings.py
基本上,Django应用对模型的类型进行了分类(在appX.base_models.py中定义了抽象基础模型),任务定义并使用了自己的不同模型类型的版本/子类,然后将其导入到django应用程序models.py由Django管理
例如:
在root.orm.apps.app1.models.py
中:
from root.tasks.taskA.models import ModelType1A
from root.tasks.taskB.models import ModelType1B
但是我尝试启动一个任务(调用django.setup())或manage.py makemigrations,我得到:
RuntimeError:模型类root.tasks.taskA.models.ModelType1A没有声明显式的app_label,并且不在INSTALLED_APPS中的应用程序中
是的,这些应用程序包含在INSTALLED_APPS中(这是从root.orm.apps.app1.models.py导入的,这会导致错误,因此Django正在检测该应用程序并尝试获取其模型,但似乎没有从外部项目或其他项目中导入时识别它们。
有什么办法可以使这项工作成功吗?
欢呼