RuntimeError: Класс модели xxx не объявляет явную метку app_label и не находится в приложении в INSTALLED_APPS - PullRequest
1 голос
/ 06 апреля 2019

Я имею в виду следующее GitHub-репо, основанное на Django 2.0 и cookiecutter-django: github.com / Apfelschuss / apfelschuss / tree / c8851430201daeb7d1d81c5a6b3c8a639ea27b02

1004 * после получения ошибкипри попытке запустить приложение:

RuntimeError: класс модели voices.models.Author не объявляет явную метку app_label и не находится в приложении в INSTALLED_APPS.

Ошибка появилась с этой строкой кода .

Я пытался сделать, как описано в https://stackoverflow.com/a/40206661/5894988, но безуспешно:

config / settings /base.py

LOCAL_APPS = [
    "apfelschuss.votes.apps.VotesConfig"
]

apfelschuss / голосов / apps.py

from django.apps import AppConfig


class VotesConfig(AppConfig):

    name = "apfelschuss.votes"
    verbose_name = "Votes"

Есть идеи, что я делаю не так?

Если кому-то интересно, как запустить докер-контейнер репо.Здесь описано .

Ответы [ 3 ]

1 голос
/ 07 апреля 2019

Работа с абсолютным импортом в представлении решила мою проблему.Я изменил .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 здесь .

0 голосов
/ 24 апреля 2019

ОСОБЫЙ СЛУЧАЙ (ОШИБКА)

Вы случайно добавили имя своего приложения в раздел Middleware в settings.py.

spent some good time debugging, thought this might help save someone else's time.

0 голосов
/ 07 апреля 2019

Когда написано "Класс модели 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

edit

Я проверил ваш репозиторий, и я думаю, что вы слишком усложняете проект, имея приложения users и votes в apfelschuss.

Я вытащил их в корень проекта и все прошло гладко;https://github.com/marksweb/apfelschuss/tree/so/questions/55553252

Это более типичный подход к структуре проекта в проектах django / python.

...