RuntimeError: класс модели django.contrib.sites.models.Site не объявляет явно app_label и не находится в приложении в INSTALLED_APPS

Я создаю приложение с Django Rest Framework и AngularJs. Я использую Django-rest-auth для аутентификации, хотя мне не удалось его настроить. В любом случае, я пытаюсь настроить это приложение для своего проекта. Я понял, что мне нужно установить django-rest-auth-registration, чтобы он заработал, поэтому я последовал этому документации для выполнения следующих действий:

Я выполнил команды

pip установить django-rest-auth

и

pip установить django-allauth

Любой мой файл settings.py выглядит так:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # 3rd party apps
    'rest_framework',
    'rest_framework.authtoken',
    'rest_auth',
    'allauth',
    'allauth.account',
    'rest_auth.registration',

    # My app
    'myapp',
]

Я также добавил механизмы аутентификации, context_processors и правильные URL-адреса.

Однако, когда я пытаюсь выполнить миграцию, мой терминал выдает следующую ошибку:

RuntimeError: класс модели django.contrib.sites.models.Site не объявляет явно app_label и не находится в приложении в INSTALLED_APPS.

Почему я получаю эту ошибку и как ее решить, чтобы перенести мой проект? Спасибо!


person darkhorse    schedule 14.02.2016    source источник
comment
Отвечает ли это на ваш вопрос? Модель Django не объявляет явно app_label   -  person Qumber    schedule 26.11.2020


Ответы (5)


Исправление

Просто добавьте каркас сайтов от Django в свои приложения и установите для SITE_ID значение 1 в настройках.

INSTALLED_APPS = [
    ...
    'django.contrib.sites',
]

SITE_ID = 1

Почему это происходит?

Django's Sites Framework — это дополнительный модуль, связанный с основной библиотекой, который позволяет использовать одно приложение / кодовая база Django с разными сайтами (которые могут использовать разные базы данных, логику в представлениях и т. д.). Параметр SITE_ID, как указано в документации, "является используется для того, чтобы данные приложения могли подключаться к определенным сайтам, а одна база данных могла управлять контентом для нескольких сайтов".

В данном конкретном случае для правильной работы AllAuth требуется Sites Framework. Многие другие сторонние библиотеки созданы для безопасной обработки случаев, когда может присутствовать несколько сайтов, и поэтому они могут быть лучшими.

person Ian Price    schedule 14.02.2016
comment
Это решает проблему, но откуда она берется? - person erikbwork; 23.08.2016
comment
Django's Sites Framework — это дополнительный модуль, связанный с основной библиотекой, позволяет использовать одно приложение/кодовую базу Django с разными сайтами (которые могут использовать разные базы данных, логику в представлениях и т. д.). В данном конкретном случае для правильной работы AllAuth требуется Sites Framework. (как и многие другие сторонние библиотеки, созданные для безопасной обработки случаев, когда может присутствовать несколько сайтов). - person Ian Price; 23.08.2016
comment
в 2018 больше не нужен SITE_ID, а у меня такая проблема - person holms; 02.03.2018
comment
Несмотря на наличие django.contrib.sites и SITE_ID = 1, у меня все еще есть эта проблема. - person Ross Symonds; 28.10.2020
comment
Проверьте трассировку, и вы увидите, какое стороннее приложение пытается использовать django.contrib.sites. В моем случае это усерена. - person ming; 30.07.2021

Я наткнулся на этот пост через поиск Google. Моя проблема заключалась в запуске тестов, которые взорвались с ошибкой:

RuntimeError: Model class app.taxonomy.models.Term doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

Это работало на Python 2.7.x с абсолютным импортом. Как упоминал Колтон Хикс в комментариях ниже, это также может произойти с Python 3 (pytest 3.2.3 с Django 1.11.4).

In my tests.py:

from __future__ import absolute_import
[...]
from .models import Demographics, Term

После изменения относительного импорта на абсолютный импорт проблема исчезла:

from taxonomy.models import Demographics, Term

ХТН

person berto    schedule 17.01.2017
comment
Была аналогичная проблема, но с использованием Python3. В моем файле test.py я использовал относительный импорт представления, которое хотел протестировать from .views import LatestAccount. Ошибка, которую я получал, была даже не для модели, используемой в файлеtests.py. Тем не менее, удаление этого относительного импорта и замена его абсолютным импортом устранили проблему. - person Colton Hicks; 31.10.2017
comment
@ColtonHicks, с каким тестировщиком это произошло; Я внесу поправки в ваши выводы python3 к моему ответу. - person berto; 18.12.2017
comment
Я использовал pytest 3.2.3 внутри приложения django 1.11.4. - person Colton Hicks; 19.12.2017

Я получил ошибку выше. Однако моя проблема была в urls.py. Я следовал рецепту PyDanny cookiecutter django. Моя ошибка заключалась в том, чтобы поместить в urls.py эту строку:

    url(r'^demo/', include('project.demoapp.urls', namespace='demoapp')),

когда я исправил это:

    url(r'^demo/', include('demoapp.urls', namespace='demoapp')),

все было хорошо. Я также изменил свои локальные приложения (я сделал это первым, поэтому критической ошибкой была неправильная конфигурация URL):

LOCAL_APPS = [
    # Your stuff: custom apps go here
    'demoapp.apps.DemoAppConfig',
]
person hum3    schedule 04.07.2017

Просто добавьте 'django.contrib.sites', к INSTALLED_APPS и установите SITE_ID = 1 в файле settings.py.

person Ahmed Adewale    schedule 18.01.2019

Попробуйте добавить app_label = 'yourApp' в метакласс моделей:

class Meta:

    app_label = 'yourApp'
person PowerAktar    schedule 12.06.2020