我在运行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.
那么我做错了什么?
答案 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
包含项目配置。