1

我正在处理一个相对较大的平面应用程序。为了保持关注点分离,我将模型和视图文件拆分为auth_modelsdashboard_modelstaxonomy_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,我没有得到任何输出。没有警告,什么都没有。

这个问题的原因是我正在实施一个数据库修改和迁移,其中 South 无法处理多个方面。所以我基本上是从一个新的模式开始,稍后将实现一个数据转换脚本来迁移现有的数据集。为此,我需要架构来创建模型表。

4

2 回答 2

3

看到这个答案。

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从模块名称推断出,它可能存在于应用程序层次结构的深处。

于 2013-08-20T01:02:18.727 回答
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))

PS 另一个建议是改进您命名文件的样式。因为auth_models.py, dashboard_models.pyand taxonomy_models.pyare all underapp/models你可以简单地截断_models.py结尾。即重命名您的文件/models

auth_models.py -> auth.py
dashboard_models.py -> dashboard.py
taxonomy_models.py -> taxonomy.py

按照上面的说明导入模型类:

from .auth import MyUserModel
于 2013-08-19T23:23:35.037 回答