Django-manage.py sql APPNAME未生成模型sql

Django-manage.py sql APPNAME未生成模型sql,django,django-models,Django,Django Models,我正在开发一个相对较大的平面应用程序。为了保持关注点的分离,我将模型和视图文件分为auth_模型、dashboard_模型、taxonomy_模型等等。这些文件已作为文件放置在文件夹结构中 APPNAME/ app/ models/ __init__.py auth_models.py dashboard_models.py taxonomy_models.py ... views/ __init__.

我正在开发一个相对较大的平面应用程序。为了保持关注点的分离,我将模型和视图文件分为auth_模型、dashboard_模型、taxonomy_模型等等。这些文件已作为文件放置在文件夹结构中

APPNAME/
  app/
    models/ 
      __init__.py
      auth_models.py
      dashboard_models.py
      taxonomy_models.py
      ...
    views/
      __init__.py
      dashboard_views.py
      taxonomy_views.py
      ...
My app/models/_init__.py具有以下功能:

from auth_models import *
from dashboard_models import *
from taxonomy_models import *
但是,当我运行./manage.py sql应用程序时,我没有得到任何输出。没有警告,什么都没有

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

如果您的auth_models.py包含模型类MyUserModel,则需要将以下内容放在app/models下的uuu init_uuu.py中:

另一个建议是改进文件命名的风格。由于auth_models.py、dashboard_models.py和taxonomy_models.py都位于app/models下,因此您可以简单地截断_models.py结尾。例如,重命名/models下的文件:

要按照上面的说明导入模型类,请执行以下操作:

from .auth import MyUserModel
如果auth_models.py包含模型类MyUserModel,则需要将以下内容放在app/models下的_init__u;.py中:

另一个建议是改进文件命名的风格。由于auth_models.py、dashboard_models.py和taxonomy_models.py都位于app/models下,因此您可以简单地截断_models.py结尾。例如,重命名/models下的文件:

要按照上面的说明导入模型类,请执行以下操作:

from .auth import MyUserModel
见答案

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]}
由此,我们可以看出,它从模块名称推断出应用程序标签,模块名称可能存在于应用程序层次结构的深处。

请参阅答案

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]}

由此,我们可以看出,它从模块名称推断出应用程序标签,模块名称可能存在于应用程序层次结构的深处。

是的,我确实导入了模型,并可能实现您的重命名建议。我已经编辑了我的问题,以包含_init__uuuy.py文件的内容。是否添加了try。。除了部分,除了恐怖?是的,我做了。产量没有变化。这可能是使用import*而不是特定的模型名的结果吗?请尝试一下,因为我没有主意了。根据我的经验,import*是合法的,但糟糕的做法无助于提高可读性,而且您正在导入可能根本不需要的内容。顺便说一句,如果您成功地使其工作,您应该执行ImportError,e之外的操作,并相应地处理异常。我们不应该像我在例子中所做的那样盲目;事实上,我会更新它。是的,我确实导入了模型,并且可能会实现您的重命名建议。我已经编辑了我的问题,以包含_init__uuuy.py文件的内容。是否添加了try。。除了部分,除了恐怖?是的,我做了。产量没有变化。这可能是使用import*而不是特定的模型名的结果吗?请尝试一下,因为我没有主意了。根据我的经验,import*是合法的,但糟糕的做法无助于提高可读性,而且您正在导入可能根本不需要的内容。顺便说一句,如果您成功地使其工作,您应该执行ImportError,e之外的操作,并相应地处理异常。我们不应该像我在例子中所做的那样盲目;事实上,我会更新它。看看这个答案。Django根据模型所在的路径对您的应用程序名称进行假设,因此在这种情况下,您必须向*\u模型文件中的每个模型添加一个类Meta:app\u label='app'。AustinPhillips,这就是解决方案。如果你回答,我就接受。谢谢看看这个答案。Django根据模型所在的路径对您的应用程序名称进行假设,因此在这种情况下,您必须向*\u模型文件中的每个模型添加一个类Meta:app\u label='app'。AustinPhillips,这就是解决方案。如果你回答,我就接受。谢谢