Django 1.10 makemigrations errors

时间:2017-04-12 22:07:26

标签: django django-models django-migrations

我在运行Django 1.10.6的Ubuntu机器上安装Django应用程序时遇到了重大问题。

我习惯使用旧版本的Django,现在我无法安装我的webapp。情况如下:

我有一个名为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应用程序(使用Twisted引导Django)。我将这个包称为“mycommon”。所以我的“真实”模型就在这里:

(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非常简单,因为它只使用了mycommon模型:

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.

那么我做错了什么?

1 个答案:

答案 0 :(得分:0)

INSTALLED_APPS中,您应该只有'myproject',而不是'.models'

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

最后,删除myproject/models,因为myproject包含项目配置。