RuntimeError: Model class xxx doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS
RuntimeError: Model class xxx doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS
我参考了以下基于 Django 2.0 和 cookiecutter-django 的 GitHub 存储库:github.com/Apfelschuss/apfelschuss/tree/c8851430201daeb7d1d81c5a6b3c8a639ea27b02
我在尝试 运行 应用程序时遇到以下错误:
RuntimeError: Model class votes.models.Author doesn't declare an
explicit app_label and isn't in an application in INSTALLED_APPS.
错误出现 this line of code。
我尝试按照 中的描述进行操作,但没有成功:
config/settings/base.py
LOCAL_APPS = [
"apfelschuss.votes.apps.VotesConfig"
]
apfelschuss/votes/apps.py
from django.apps import AppConfig
class VotesConfig(AppConfig):
name = "apfelschuss.votes"
verbose_name = "Votes"
知道我做错了什么吗?
如果有人对如何 运行 存储库的 docker 容器感兴趣。它被描述为 here.
当它显示 "Model class xxx doesn't declare an explicit app_label" 时,您的模型可以指定 Meta
来定义它们的 app_label
。您还可以自定义数据库 table 名称以及一系列其他选项作为元数据的一部分。
您需要对所有模型执行类似的操作;
class Author(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
profile_picture = models.ImageField()
class Meta:
app_label = 'apfelschuss.votes'
def __str__(self):
return self.user.username
编辑
我查看了您的存储库,我认为您将 users
和 votes
应用程序置于 apfelschuss
.
下,使项目过于复杂
我将它们拉到项目的根目录并且一切运行顺利;
https://github.com/marksweb/apfelschuss/tree/so/questions/55553252
这是 django/python 项目中更典型的项目结构方法。
在视图中使用绝对导入解决了我的问题。我将 .models 更改为 apfelschuss.votes.models.
导致运行时错误的代码:
from django.shortcuts import render
from .models import Voting
问题已通过绝对导入解决:
from django.shortcuts import render
from apfelschuss.votes.models import Voting
参见 GitHub here 上的提交。
您不小心在 settings.py
的 MIDDLEWARE
部分下添加了您的应用程序名称。
花了一些时间进行调试,认为这可能有助于节省其他人的时间。
我在 VS Code 上使用 Python 3.7.5。同样的问题让我感到困惑。
我进入最初创建的项目,发现 settings.py
去了部分
INSTALLED_APPS = []
并添加了
'myapp.apps.MyappConfig'
, - 确保大小写正确
这指的是应用程序 apps.py 中的 class 导致问题
我遇到了同样的错误,并通过向我的项目根目录中的主模块添加一个丢失的 __init__.py
文件(只是一个空白文件)来修复它。
~/my_project
foo/
models.py
tests.py
__init__.py # <-- Added an empty __init__.py here
在文件 apps.py 中我们看到:
class ArticlesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'Django.apps.articles'
我们需要名字'Django.apps.articles'
现在在终端中写入:
from Django.apps.articles.models import Article
一切正常!我 运行 在 PyCharm 中解决了这个问题。
我参考了以下基于 Django 2.0 和 cookiecutter-django 的 GitHub 存储库:github.com/Apfelschuss/apfelschuss/tree/c8851430201daeb7d1d81c5a6b3c8a639ea27b02
我在尝试 运行 应用程序时遇到以下错误:
RuntimeError: Model class votes.models.Author doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
错误出现 this line of code。
我尝试按照
config/settings/base.py
LOCAL_APPS = [
"apfelschuss.votes.apps.VotesConfig"
]
apfelschuss/votes/apps.py
from django.apps import AppConfig
class VotesConfig(AppConfig):
name = "apfelschuss.votes"
verbose_name = "Votes"
知道我做错了什么吗?
如果有人对如何 运行 存储库的 docker 容器感兴趣。它被描述为 here.
当它显示 "Model class xxx doesn't declare an explicit app_label" 时,您的模型可以指定 Meta
来定义它们的 app_label
。您还可以自定义数据库 table 名称以及一系列其他选项作为元数据的一部分。
您需要对所有模型执行类似的操作;
class Author(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
profile_picture = models.ImageField()
class Meta:
app_label = 'apfelschuss.votes'
def __str__(self):
return self.user.username
编辑
我查看了您的存储库,我认为您将 users
和 votes
应用程序置于 apfelschuss
.
我将它们拉到项目的根目录并且一切运行顺利; https://github.com/marksweb/apfelschuss/tree/so/questions/55553252
这是 django/python 项目中更典型的项目结构方法。
在视图中使用绝对导入解决了我的问题。我将 .models 更改为 apfelschuss.votes.models.
导致运行时错误的代码:
from django.shortcuts import render
from .models import Voting
问题已通过绝对导入解决:
from django.shortcuts import render
from apfelschuss.votes.models import Voting
参见 GitHub here 上的提交。
您不小心在 settings.py
的 MIDDLEWARE
部分下添加了您的应用程序名称。
花了一些时间进行调试,认为这可能有助于节省其他人的时间。
我在 VS Code 上使用 Python 3.7.5。同样的问题让我感到困惑。 我进入最初创建的项目,发现 settings.py
去了部分
INSTALLED_APPS = []
并添加了
'myapp.apps.MyappConfig'
, - 确保大小写正确
这指的是应用程序 apps.py 中的 class 导致问题
我遇到了同样的错误,并通过向我的项目根目录中的主模块添加一个丢失的 __init__.py
文件(只是一个空白文件)来修复它。
~/my_project
foo/
models.py
tests.py
__init__.py # <-- Added an empty __init__.py here
在文件 apps.py 中我们看到:
class ArticlesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'Django.apps.articles'
我们需要名字'Django.apps.articles'
现在在终端中写入:
from Django.apps.articles.models import Article
一切正常!我 运行 在 PyCharm 中解决了这个问题。