it-roy-ru.com

Модель Django "не объявляет явную метку приложения"

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

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

В Интернете есть SO НЕМНОГО информация об этом, и ни одно решение не решило мою проблему. Любой совет будет чрезвычайно признателен.

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

Из моего settings.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'
60
Slbox

Вам не хватает ввода имени приложения в файл настроек? 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'
51
Xeberdee

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

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

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

11
stasdeep

Я получил это, когда я использовал ./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()
11
lukeaus

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

apps.py

from Django.apps import AppConfig    

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

Я получаю ту же ошибку, и я не знаю, как решить эту проблему. Мне потребовалось много часов, чтобы заметить, что у меня 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". Но удаление этого файла init решило мою проблему.

7
samuel

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

неправильно:

from someModule import someClass

право:

from .someModule import someClass

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

попробуйте зарегистрировать модель в 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, проблема решена

5
rpstw

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

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

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

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

  • проблема возникла в результате использования 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, в настройках и в пути импорта моего второго приложения . - но этого было недостаточно для исправления путей в этих трех местах, поскольку были созданы миграции с импортом, ссылающимся на неправильное имя приложения. Таким образом, во время миграции продолжала возникать одна и та же ошибка (за исключением этого времени из-за миграций).

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

1
harrouet

В моем случае я получил эту ошибку при переносе кода с 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.

1
user2641103

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

manage.py makemigrations myapp

Когда я удалил его миграции, а затем запустил:

manage.py makemigrations

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

0
Cerin

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

0
black_hole_sun

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

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

0
James Bradbury

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

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

from ..api.serializers import AccountSerializer

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

И в файле "сериализаторов":

from ..models import Account

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

Я получил эту ошибку при импорте моделей в тестах, то есть с учетом структуры проекта 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: Возможно, это немного поздно, но я не нашел в других ответах, как решить эту проблему в моем коде, и я хочу поделиться своим решением.

0
juliocesar

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

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

0
boxed

У меня похожая ошибка при создании 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
0
Jade Dhangwattanotai

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

SECRET_KEY = os.getenv('SECRET_KEY')

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

0
ameier38