RuntimeError: класс модели xxx не объявляет явно app_label и не находится в приложении в INSTALLED_APPS

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

Я получаю следующую ошибку при попытке запустить приложение:

RuntimeError: Model class votes.models.Author doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

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

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

конфиг/настройки/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"

Любая идея, что я делаю неправильно?

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
0
21 369
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Когда он говорит: «Модельный класс 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

редактировать

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

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

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

Спасибо за ваш ценный отзыв Марк. На самом деле эта модель не определена вне INSTALLED_APPS, верно? Извините, я новичок в питоне. Тем не менее, я добавил мета, как описано, но, к сожалению, я получил ValueError: Недопустимая ссылка на модель 'apfelschuss.votes.Voting_categories'. Ссылки на строковые модели должны иметь вид app_label.ModelName.. Я пробовал также некоторые другие строки без успеха.

Philipp 07.04.2019 00:58

Да, технически это не нужно, но об этом говорит ваша ошибка. Я думаю, что app_label на моделях не поддерживает этот подход с пунктирным путем - я пытался проиллюстрировать концепцию больше всего на свете. Кроме того, я запускаю ваше приложение в django 2.2 без проблем. Я попробую ваш полный проект и докер, но приложение apfelschuss.votes.apps.VotesConfig загружается и устанавливается.

markwalker_ 07.04.2019 12:23

Спасибо за ваш ценный отзыв Марк. Поскольку я использую cookiecutter-django в качестве скелета, я предпочитаю, чтобы приложения находились в папке второго уровня apfelschuss (см. № 1876).

Philipp 08.04.2019 21:55

ЭТО ДОЛЖЕН БЫТЬ ПРИНЯТЫЙ ОТВЕТ! В моем случае я переместил модели в другое место и должен был добавить Meta, как вы указали, чтобы все заработало. Спасибо и за ссылку. Изменение относительно абсолютного импорта, как предложено в другом ответе, не помогает - я уже использовал абсолютные пути и имел эту проблему.

yǝsʞǝla 10.12.2019 03:50
Ответ принят как подходящий

Работа с абсолютным импортом в представлении решила мою проблему. Я изменил .модели на apfelschuss.votes.models.

Код, который приводит к ошибке времени выполнения:

from django.shortcuts import render

from .models import Voting

Проблема решена с абсолютным импортом:

from django.shortcuts import render

from apfelschuss.votes.models import Voting

См. коммит на GitHub здесь.

Правильный ответ — добавить Meta. Абсолютный импорт ничего не делает, если вы моделируете и не находитесь в том же каталоге/пакете, что и приложение.

yǝsʞǝla 10.12.2019 03:51

Абсолютный импорт работал у меня без каких-либо других изменений в модели. Я бы предпочел относительный импорт. Есть ли способ сделать это?

Zach 21.08.2020 05:22

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

Потратил некоторое время на отладку, подумал, что это может помочь сэкономить чье-то время.

Благодарим вас за отзыв и устранение неполадок, Mujeeb. Честно говоря, я не совсем уверен, где вы имеете в виду? У меня нет settings.py, так как я работаю с настройкой Cookiecutter. См. здесь. Установленные приложения в base.py — это INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS, но я не добавлял свое приложение в промежуточное ПО.

Philipp 26.04.2019 15:23

Спасибо, Филипп. Итак, я получил ту же ошибку, что и вы, и ошибка была такой, как указано выше. Ответ, конечно, не для вас, а для кого-то другого, который, возможно, придет в будущем и столкнется с той же проблемой. Если это никак не поможет, дайте мне знать, и я удалю это. Спасибо.

Mujeeb Ishaque 27.04.2019 14:37

А, теперь я понял :-) Я уверен, что это поможет другим. Спасибо за разъяснение Муджиб.

Philipp 27.04.2019 16:17

Я использую Python 3.7.5 в VS Code. Эта же проблема смущала меня. Зашел в изначально созданный проект и нашел settings.py

Зашел в раздел

INSTALLED_APPS = []

и добавил

'myapp.apps.MyappConfig', - убедитесь, что он правильно оформлен

это относится к классу в apps.py в приложении, вызывающем проблемы

У меня была такая же ошибка, и я исправил ее, добавив отсутствующий файл __init__.py (просто пустой файл) в мой основной модуль внутри корня моего проекта.

~/my_project
    foo/
        models.py
        tests.py
        __init__.py  # <-- Added an empty __init__.py here

В файле приложения.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.

Другие вопросы по теме