我正在处理一个相对较大的平面应用程序。为了保持关注点的分离,我将模型和视图文件拆分为auth_models
,dashboard_models
,taxonomy_models
等。这些已被放置在文件夹结构中
APPNAME/
app/
models/
__init__.py
auth_models.py
dashboard_models.py
taxonomy_models.py
...
views/
__init__.py
dashboard_views.py
taxonomy_views.py
...
我的app/models/__init__.py
有以下内容:
from auth_models import *
from dashboard_models import *
from taxonomy_models import *
然而,当我运行./manage.py sql app
时,我得不到任何输出。没有警告,什么都没有。
这个问题的原因是我正在实施数据库修改和迁移,其中南方无法处理多个方面。所以我基本上从一个新的架构开始,稍后将实现一个数据转换脚本来迁移现有的数据集。为此,我需要架构来创建模型表。
答案 0 :(得分:3)
请参阅this回答。
Django根据模型所在的路径对您的应用名称进行假设,因此您不得不在这种情况下为每个导入的模型添加应用标签,如下所示:
class MyModel(Model):
# Model fields
class Meta:
app_label = 'app'
<强>背景强>:
在撰写本文时,Django有以下代码来检测模型的应用标签:
if getattr(meta, 'app_label', None) is None:
# Figure out the app_label by looking one level up.
# For 'django.contrib.sites.models', this would be 'sites'.
model_module = sys.modules[new_class.__module__]
kwargs = {"app_label": model_module.__name__.split('.')[-2]}
由此,我们看到它从模块名称中推断出app_label
,它可能存在于应用程序层次结构的深处。
答案 1 :(得分:2)
如果您的auth_models.py
包含模型类MyUserModel
,则需要将以下内容放在__init__.py
下的app/models
下:
try:
from .auth_models import MyUserModel
except ImportError as e:
sys.stderr.write("Error: failed to import models module ({})".format(e))
P.S。另一个建议是改进您为文件命名的样式。由于auth_models.py
,dashboard_models.py
和taxonomy_models.py
都在app/models
下,因此您可以简单地截断_models.py
个结尾。即在/models
下重命名您的文件:
auth_models.py -> auth.py
dashboard_models.py -> dashboard.py
taxonomy_models.py -> taxonomy.py
按照上面的说明导入Model类:
from .auth import MyUserModel