Django 1.10 makemigrations 错误

Django 1.10 makemigrations errors

我在 Ubuntu 机器 运行ning Django 1.10.6.

上安装 Django 应用程序时遇到了重大问题

我习惯使用旧版本的 Django,现在无法安装我的 Web 应用程序。情况是这样的:

我有一个名为 myproject 的 Django 项目。文件结构为:

(BASEDIR)/manage.py
(BASEDIR)/mycommon/    # I will discuss mycommon below
(BASEDIR)/myproject/
(BASEDIR)/myproject/settings.py
(BASEDIR)/myproject/urls.py
(BASEDIR)/myproject/views.py
(BASEDIR)/myproject/wsgi.py
(BASEDIR)/myproject/models/
(BASEDIR)/myproject/models/__init__.py
(BASEDIR)/myproject/models/models.py

事实证明,对于这个项目,我需要将我的模型放在一个公共包中,因为还有另一个 python 应用程序(使用引导 Django 的 Twisted)需要访问这些模型。我将这个包称为 "mycommon"。所以我的 "real" 模型在这里:

(BASEDIR)/mycommon/
(BASEDIR)/mycommon/utils.py
(BASEDIR)/mycommon/models/
(BASEDIR)/mycommon/models/__init__.py
(BASEDIR)/mycommon/models/models.py

因此 Django 设置文件位于 (BASEDIR)/myproject/settings.py 并且 INSTALLED_APPS 参数设置为:

INSTALLED_APPS = (
'myproject.models',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
)

最后,请注意 myproject/models/models.py 非常简单,因为它只使用了我的常用模型:

from django.db import models
from mycommon.models.models import *

到目前为止一切顺利,这个结构在旧的 Django 版本上运行良好。无论如何,我从一个空的 MYSQL 数据库开始(已创建但为空),现在我回到 (BASEDIR) 和 运行 这个:

python manage.py makemigrations mycommon.models

不幸的是,我收到这样的错误:

RuntimeError: Model class mycommon.models.models.SomeModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

那我做错了什么?

INSTALLED_APPS 中你应该只有 'myproject',没有 '.models'

但是由于您使用的是 Django 1.10,如果您通过 manage.py startapp mycommon 创建 mycommon 应用程序会更干净。这将创建一些文件,但是您应该将模型移动到 mycommon/models.py。注意 mycommon/apps.py。您不必触摸此文件,只需将其包含在 INSTALLED_APPS 列表中:'mycommon.apps.MycommonConfig'。这样迁移框架将自动发现您的模型。

最后,删除 myproject/models,因为 myproject 保留项目配置。