Django报错解决:RuntimeError: Model class ...apps... doesn't declare an explicit app_label and isn't in a

报错信息
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	# 错误导入方式
  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值