Подтвердить что ты не робот

Модель Django "не объявляет явную строку app_label"

Я нахожусь в конце. После дюжины часов устранения неполадок, возможно, больше, я подумал, что наконец занялся бизнесом, но потом я получил:

Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label 

В Интернете есть информация SO LITTLE, и никакое решение там не разрешило мою проблему. Любые советы будут чрезвычайно оценены.

Я использую Python 3.4 и Django 1.10.

Из моих настроек .py:

INSTALLED_APPS = [
    'DeleteNote.apps.DeletenoteConfig',
    'LibrarySync.apps.LibrarysyncConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

И мои файлы apps.py выглядят следующим образом:

from django.apps import AppConfig


class DeletenoteConfig(AppConfig):
    name = 'DeleteNote'

и

from django.apps import AppConfig


class LibrarysyncConfig(AppConfig):
    name = 'LibrarySync'
4b9b3361

Ответ 1

Вам не хватает ввода имени приложения в файл настроек? myAppNameConfig - это класс по умолчанию, сгенерированный на apps.py командой .manage.py createapp myAppName. Где myAppName - это имя вашего приложения.

settings.py

INSTALLED_APPS = [
'myAppName.apps.myAppNameConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

Таким образом, файл настроек узнает, что вы хотите назвать своим приложением. Вы можете изменить, как он выглядит позже в файле apps.py, добавив следующий код в

myAppName/apps.py

class myAppNameConfig(AppConfig):
    name = 'myAppName'
    verbose_name = 'A Much Better Name'

Ответ 2

Я получаю ту же ошибку, и я не знаю, как решить эту проблему. Мне потребовалось много часов, чтобы заметить, что у меня init.py в той же директории, что и manage.py из django.

До:

|-- myproject
  |-- __init__.py
  |-- manage.py
  |-- myproject
    |-- ...
  |-- app1
    |-- models.py
  |-- app2
    |-- models.py

После:

|-- myproject
  |-- manage.py
  |-- myproject
    |-- ...
  |-- app1
    |-- models.py
  |-- app2
    |-- models.py

Это довольно запутанно, что вы получаете эту ошибку "не объявляет явную app_label". Но удаление этого файла инициализации решило мою проблему.

Ответ 3

Я получил этот, когда использовал ./manage.py shell то я случайно импортирован из корневого каталога уровня проекта

# don't do this
from project.someapp.someModule import something_using_a_model
# do this
from someapp.someModule import something_using_a_model

something_using_a_model()

Ответ 4

У меня была точно такая же ошибка при запуске тестов с PyCharm. Я исправил это, явно установив переменную окружения DJANGO_SETTINGS_MODULE. Если вы используете PyCharm, просто нажмите кнопку "Редактировать конфигурации" и выберите "Переменные среды".

Установите переменную your_project_name.settings и это должно исправить your_project_name.settings.

Кажется, эта ошибка возникает, потому что PyCharm запускает тесты со своим собственным manage.py.

Ответ 5

У меня была такая же проблема только сейчас. Я исправил мой, добавив пространство имен к имени приложения. Надеюсь, кто-нибудь найдет это полезным.

apps.py

from django.apps import AppConfig    

class SalesClientConfig(AppConfig):
        name = 'portal.sales_client'
        verbose_name = 'Sales Client'

Ответ 6

как noob с помощью Python3, я считаю, что это может быть ошибка импорта вместо ошибки Django

не так:

from someModule import someClass

право:

from .someModule import someClass

это происходит несколько дней назад, но я действительно не могу воспроизвести его... Я думаю, что только новые пользователи Django могут столкнуться с этим. Где я помню:

попробуйте зарегистрировать модель в admin.py:

from django.contrib import admin
from user import User
admin.site.register(User)

попробуйте запустить сервер, ошибка выглядит как

some lines...
File "/path/to/admin.py" ,line 6
tell you there is an import error
some lines...
Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label

изменить user на .user, решить проблему

Ответ 7

Я получил эту ошибку при импорте моделей в тестах, т.е. с учетом этой структуры проекта Django:

|-- myproject
    |-- manage.py
    |-- myproject
    |-- myapp
        |-- models.py  # defines model: MyModel
        |-- tests
            |-- test_models.py

в файле test_models.py Я импортировал MyModel следующим образом:

from models import MyModel

Проблема была исправлена, если она импортирована таким образом:

from myapp.models import MyModel

Надеюсь, это поможет!

PS: Может быть, это немного поздно, но я не нашел в других ответах, как решить эту проблему в моем коде, и я хочу поделиться своим решением.

Ответ 8

Я получил эту ошибку, пытаясь обновить приложение Django Rest Framework для DRF 3.6.3 и Django 1.11.1.

Для кого-то еще в этой ситуации я нашел решение в выпуске GitHub, которое должно было отключить параметр UNAUTHENTICATED_USER в Настройки DRF:

# webapp/settings.py
...
REST_FRAMEWORK = {
    ...
    'UNAUTHENTICATED_USER': None
    ...
}

Ответ 9

Я столкнулся с этой ошибкой, когда попытался создать миграцию для одного приложения, у которого были существующие отклоненные миграции из-за слияния git. например.

manage.py makemigrations myapp

Когда я удалил его, а затем выполнил:

manage.py makemigrations

ошибка не возникла, и миграции успешно сгенерированы.

Ответ 10

Я просто столкнулся с этой проблемой и выяснил, что происходит не так. Поскольку ни один предыдущий ответ не описал проблему так, как это случилось со мной, я решил опубликовать ее для других:

  • проблема возникла из-за использования python migrate.py startapp myApp из корневой папки моего проекта, а затем перемещения myApp в дочернюю папку с помощью mv myApp myFolderWithApps/.
  • Я написал myApp.models и запустил python migrate.py makemigrations. Все прошло хорошо.
  • затем я сделал то же самое с другим приложением, которое импортировало модели из myApp. Kaboom! Я столкнулся с этой ошибкой при выполнении makemigrations. Это потому, что мне пришлось использовать myFolderWithApps.myApp для ссылки на мое приложение, но я забыл обновить MyApp/apps.py. Поэтому я исправил myApp/apps.py, settings/INSTALLED_APPS и мой путь импорта во втором приложении.
  • но затем ошибка продолжала происходить: причина была в том, что у меня были миграции, пытающиеся импортировать модели из myApp с неверным путем. Я попытался исправить файл миграции, но я подошел к тому моменту, когда было проще сбросить базу данных и удалить миграции, чтобы начать с нуля.

Короче говоря: - изначально проблема возникла из-за неправильного имени приложения в apps.py в myApp, в настройках и в пути импорта моего второго приложения. - но этого было недостаточно для исправления путей в этих трех местах, поскольку были созданы миграции с импортом, ссылающимся на неправильное имя приложения. Таким образом, во время миграции продолжала возникать та же ошибка (за исключением этого времени из-за миграций).

Так что... проверь свои миграции и удачи!

Ответ 11

TL; DR: Добавление пробела __init__.py устранило проблему для меня.

Я получил эту ошибку в PyCharm и понял, что мой файл настроек не импортируется вообще. Не было никакой очевидной ошибки, сообщающей мне об этом, но когда я поместил какой-то бессмысленный код в файл settings.py, это не вызвало ошибку.

У меня был settings.py в папке local_settings. Однако я бы хотел включить __init__.py в ту же папку, чтобы импортировать его. Как только я добавил это, ошибка исчезла.

Ответ 12

У меня похожая ошибка при создании API в Django rest_framework.

RuntimeError: Класс модели apps.core.models.University не объявляет явный> app_label и не находится в приложении в INSTALLED_APPS.

Ответ luke_aus помог мне, исправив мой urls.py

от

from project.apps.views import SurgeryView

в

from apps.views import SurgeryView

Ответ 13

В моем случае я получил эту ошибку при переносе кода с Django 1.11.11 на Django 2.2. Я определял пользовательский производный класс FileSystemStorage. В Django 1.11.11 у меня была следующая строка в models.py:

from django.core.files.storage import Storage, DefaultStorage

и позже в файле у меня было определение класса:

class MyFileStorage(FileSystemStorage):

Однако в Django 2.2 мне нужно явно ссылаться на класс FileSystemStorage при импорте:

from django.core.files.storage import Storage, DefaultStorage, FileSystemStorage

и вуаля !, ошибка исчезает.

Обратите внимание, что все сообщают о последней части сообщения об ошибке, отображаемой сервером Django. Однако, если вы прокрутите вверх, вы найдете причину в середине этой ошибки mambo-jambo.

Ответ 14

в моем случае я смог найти исправление, и, посмотрев на код остальных, это может быть та же проблема.. Мне просто нужно было добавить "django.contrib.sites" в список установленных приложений в файле settings.py файл.

надеюсь, это поможет кому-то. это мой первый вклад в сообщество программистов

Ответ 15

У меня была эта ошибка сегодня, когда я пытался запустить тесты Django, потому что я использовал сокращение from.models import * синтаксиса from.models import * в одном из моих файлов. Проблема заключалась в том, что у меня была файловая структура:

    apps/
      myapp/
        models/
          __init__.py
          foo.py
          bar.py

и в models/__init__.py я импортировал свои модели, используя сокращенный синтаксис:

    from .foo import *
    from .bar import *

В моем приложении я импортировал модели так:

    from myapp.models import Foo, Bar

Это привело к тому, что Django model doesn't declare an explicit app_label при запуске ./manage.py test.

Чтобы решить эту проблему, мне пришлось явно импортировать из полного пути в models/__init__.py:

    from myapp.models.foo import *
    from myapp.models.bar import *

Это позаботилось об ошибке.

H/t https://medium.com/@michal.bock/fix-weird-exceptions-when-running-django-tests-f58def71b59a

Ответ 16

В моем случае это происходило потому, что я использовал относительный путь к модулю в уровне проекта urls.py, INSTALLED_APPS и apps.py вместо того, чтобы быть корневым в корне проекта. т.е. абсолютные пути модулей по всему, а не относительные пути модулей + хаки.

Независимо от того, сколько я перепутал с путями в INSTALLED_APPS и apps.py в моем приложении, я не мог заставить runserver и pytest runserver и pytest пока все три из них не были внедрены в корне проекта.

Структура папки:

|-- manage.py
|-- config
    |-- settings.py
    |-- urls.py
|-- biz_portal
    |-- apps
        |-- portal
            |-- models.py
            |-- urls.py
            |-- views.py
            |-- apps.py

С помощью следующего я мог бы запустить manage.py runserver и gunicorn с помощью wsgi и без проблем использовать представления приложений portal, но pytest мог бы выдавать ошибку с ModuleNotFoundError: No module named 'apps' несмотря на DJANGO_SETTINGS_MODULE что DJANGO_SETTINGS_MODULE настроен правильно.

конфиг /settings.py:

INSTALLED_APPS = [
    ...
    "apps.portal.apps.PortalConfig",
]

biz_portal/приложения/портал /apps.py:

class PortalConfig(AppConfig):
    name = 'apps.portal'

конфиг /urls.py:

urlpatterns = [
    path('', include('apps.portal.urls')),
    ...
]

Изменение ссылки приложения в config/settings.py на biz_portal.apps.portal.apps.PortalConfig и PortalConfig.name на biz_portal.apps.portal позволило запустить pytest (у меня пока нет тестов для представлений portal), но runserver ошибку с

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

Наконец, я apps.portal для просмотра того, что все еще использует относительный путь, и обнаружил, что config/urls.py также должен использовать biz_portal.apps.portal.urls.

Ответ 17

Я получил эту ошибку после того, как я переместил SECRET_KEY, чтобы извлечь из переменной окружения и забыл ее установить при запуске приложения. Если у вас есть что-то вроде этого в settings.py

SECRET_KEY = os.getenv('SECRET_KEY')

то убедитесь, что вы на самом деле устанавливаете переменную среды.

Ответ 18

Скорее всего, у вас есть зависимый импорт.

В моем случае я использовал класс serializer в качестве параметра в моей модели, и класс serializer использовал эту модель: serializer_class= AccountSerializer

from ..api.serializers import AccountSerializer

class Account(AbstractBaseUser):
    serializer_class = AccountSerializer
    ...

И в файле "serializers":

from ..models import Account

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = (
            'id', 'email', 'date_created', 'date_modified',
            'firstname', 'lastname', 'password', 'confirm_password')
    ...

Ответ 19

Я получил эту ошибку сегодня и оказался здесь после поиска в Google. Ни один из существующих ответов не имеет отношения к моей ситуации. Единственное, что мне нужно было сделать, это импортировать модель из моего файла __init__.py на верхнем уровне приложения. Мне пришлось перенести мой импорт в функции, используя модель.

Кажется, у Django есть какой-то странный код, который может так не работать в самых разных сценариях!

Ответ 20

У меня была похожая ошибка при импорте из пакета верхнего уровня в Django. Итак, позвольте мне поделиться своим опытом. Точную причину ошибки может быть трудно найти, особенно в проекте со значительным количеством приложений. Ошибка консоли/терминала может сначала показаться не слишком полезной, поскольку она может указывать на что-то еще, но если вы прокрутите ошибки, вы увидите точный файл и строку, вызывающую его.


  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed

 File "/exact/path/to/file.py", line #, in <module>
ValueError: attempted relative import beyond top-level package



Ответ 21

Я получил эту ошибку и сегодня. Сообщение ссылается на какое-то конкретное приложение из моих приложений в INSTALLED_APPS. Но на самом деле это не имеет ничего общего с этим конкретным приложением. Я использовал новую виртуальную среду и забыл установить некоторые библиотеки, которые я использовал в этом проекте. После того, как я установил дополнительные библиотеки, все заработало.

Ответ 22

Проблема в том, что:

  1. Вы внесли изменения в файл моделей, но еще не добавили их в БД, но пытаетесь запустить Python manage.py runserver.

  2. Запустите Python manage.py makemigrations

  3. Python manage.py migrate

  4. Теперь Python manage.py runserver и все должно быть в порядке.