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

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.

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

4b9b3361

Ответ 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.