RuntimeError: Model class mysite.apps.home.models.Banner doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
系统提示应用没有注册,但实际上在seting是有注册的
INSTALLED_APPS = [
...
'home',
]
本来Django默认应用是直接在项目的根目录下面;但我应用都放在了mysite的apps里面,虽然我有在 settings.py 文件中进行导包,来Django识别我放在apps的应用,但还是无法注册。
# 增加系统目录
sys.path.insert(0, os.path.join(BASE_DIR, "mysite/apps"))
变更应用注册方式
INSTALLED_APPS = [
...
'home.apps.HomeConfig',
]
成功运行
System check identified no issues (0 silenced).
June 26, 2019 - 20:28:45
Django version 2.2.2, using settings 'mysite.settings.dev'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
其实在Django1.9的版本前,注册应用不能直接注册,要用 “home.app.HomeConfig” 代替 “home”;但Django 1.9后,内部有优化,可以直接用应用的名称注册。
但这种方式应该只限于根目录里,如果有变更app应用所在位置,就要用原始的方法注册。
同时要确认应用下面的apps.py里面,name值的路径是正确的
from django.apps import AppConfig
class HomeConfig(AppConfig):
name = 'home'
比如在apps的文件夹下面有两个app:app01和app02
从app01应用的中models.py中导入Course到app01的serializer.py中,在serializer.py中以from app01.models import Course
的路径导入,而不能以from mysite.app01.models import Course
的路径导入。
应用下的views.py(视图层)和url.py(路由分发)导入模型中的类,
要用当前应用下的相对路径,而不能用项目中的路径
# 视图层导入模型
from .models import User # 正确导入方式
from mysite.home.models import User # 错误导入方式
# 路由层导入视图
from . import views # 正确导入方式
from mysite.home import views # 错误导入方式