运行时错误:模型类 xxx 未声明显式 app_label 并且不在 INSTALLED_APPS 中的应用程序中

Phi*_*ipp 9 django python-3.x cookiecutter-django

我参考以下基于 Django 2.0 和cookiecutter -django 的 GitHub 存储库:github.com/Apfelschuss/apfelschuss/tree/c8851430201daeb7d1d81c5a6b3c8a639ea27b02

尝试运行应用程序时出现以下错误:

运行时错误:模型类 votes.models.Author 未声明显式 app_label 并且不在 INSTALLED_APPS 中的应用程序中。

这行代码出现错误。

我尝试按照/sf/answers/2814466301/ 中的描述进行操作,但没有成功:

配置/设置/base.py

LOCAL_APPS = [
    "apfelschuss.votes.apps.VotesConfig"
]
Run Code Online (Sandbox Code Playgroud)

apfelschuss/votes/apps.py

from django.apps import AppConfig


class VotesConfig(AppConfig):

    name = "apfelschuss.votes"
    verbose_name = "Votes"
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?

如果有人对如何运行 repo 的 docker 容器感兴趣。它是在此处描述的。

mar*_*er_ 12

当它说“模型类 xxx 未声明显式 app_label”时,您的模型可以指定Meta定义它们的app_label. 您还可以自定义数据库表名称以及作为元数据一部分的其他选项。

你需要在你所有的模型上做这样的事情;

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
Run Code Online (Sandbox Code Playgroud)

编辑

我已经检查了你的 repo,我认为你通过将usersvotes应用程序放在apfelschuss.

我把它们拉到了项目的根目录,一切都运行得很顺利; https://github.com/marksweb/apfelchuss/tree/so/questions/55553252

这是 django/python 项目中比较典型的项目结构方法。

  • 感谢您的宝贵反馈马克。由于我使用 cookiecutter-django 作为骨架,我更喜欢将应用程序放在第二级 `apfelschuss` 文件夹中(参见 [#1876](https://github.com/pydanny/cookiecutter-django/issues/1876))。 (2认同)
  • 这应该是公认的答案!就我而言,我将模型移到另一个地方,并且必须像您指定的那样添加“Meta”才能使其工作。也感谢您的链接。像其他答案中建议的那样相对于绝对导入进行更改并没有帮助 - 我已经在使用绝对路径并且遇到了这个问题。 (2认同)

Phi*_*ipp 12

在视图中使用绝对导入解决了我的问题。我将.models更改为apfelschuss.votes.models

导致运行时错误的代码:

from django.shortcuts import render

from .models import Voting
Run Code Online (Sandbox Code Playgroud)

绝对导入解决的问题:

from django.shortcuts import render

from apfelschuss.votes.models import Voting
Run Code Online (Sandbox Code Playgroud)

此处查看 GitHub 上的提交。

  • 正确的答案是添加`Meta`。如果您进行建模并且与应用程序不在同一目录/包中,则绝对导入不会执行任何操作。 (2认同)