RuntimeError: класс модели django.contrib.sites.models.Site не объявляет явную метку app_label и не находится в приложении в INSTALLED_APPS
Я создаю приложение с Django Rest Framework и AngularJs. Я использую Django-rest-auth для моих целей аутентификации, хотя я не смог его настроить. Во всяком случае, я пытаюсь настроить это приложение с моим проектом. Я понял, что мне нужно установить django-rest-auth-registration, чтобы запустить его, поэтому я выполнил эту документацию, чтобы сделать следующее:
Я выполнил команды
pip install django-rest-auth
и
pip install 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',
]
Я также добавил серверы аутентификации, контекстные_процессоры и правильные URL-адреса.
Однако, когда я пытаюсь выполнить миграцию, мой терминал выдает следующую ошибку:
RuntimeError: класс модели django.contrib.sites.models.Site не объявить явную строку app_label и не находится в приложении в INSTALLED_APPS.
Почему я получаю эту ошибку и как ее решить, чтобы перенести мой проект? Спасибо!
Ответы
Ответ 1
Исправить
Просто добавьте Django Рамки сайтов в свои приложения и установите для SITE_ID значение 1 в ваших настройках.
INSTALLED_APPS = [
...
'django.contrib.sites',
]
SITE_ID = 1
Почему это происходит?
Django Site Framework - это расширенный модуль, содержащий основную библиотеку, которая позволяет использовать одно приложение/кодовую базу Django с разными сайтами (которые могут использовать разные базы данных, логика в представлениях и т.д.). Параметр SITE_ID, как указано в документах, "используется, чтобы данные приложения могли подключаться к определенным сайтам, а одна база данных могла управлять контентом для нескольких сайтов".
В этом конкретном случае AllAuth требует Структуры Сайтов для правильной работы. Многие другие сторонние библиотеки созданы для безопасного обращения с случаями, когда несколько сайтов могут присутствовать и как таковые могут быть лучшими.
Ответ 2
Я приземлился на этом посту с помощью поиска 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).
В моем tests.py
:
from __future__ import absolute_import
[...]
from .models import Demographics, Term
После изменения относительного импорта в абсолютный импорт проблема исчезла:
from taxonomy.models import Demographics, Term
НТН
Ответ 3
Я получил ошибку выше. Однако моя проблема была в urls.py. Я следил за рецептом пикантного диджея PyDanny. Моя ошибка заключалась в том, чтобы вставить 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',
]
Ответ 4
Просто добавьте 'django.contrib.sites',
в INSTALLED_APPS
и установите SITE_ID = 1
в вашем файле settings.py
.