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
保留项目配置。
我在 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
保留项目配置。