Помилка "Неправильно налаштований" у налаштуваннях БД Django


170

Django (1.5) для мене працює добре, але коли я запускаю інтерпретатора Python (Python 3), щоб перевірити деякі речі, я отримую найсмішнішу помилку, коли намагаюся імпортувати from django.contrib.auth.models import User-

Traceback (most recent call last):
  File "/usr/local/lib/python3.2/dist-packages/django/conf/__init__.py", line 36, in _setup
    settings_module = os.environ[ENVIRONMENT_VARIABLE]
  File "/usr/lib/python3.2/os.py", line 450, in __getitem__
    value = self._data[self.encodekey(key)]
KeyError: b'DJANGO_SETTINGS_MODULE'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.2/dist-packages/django/contrib/auth/models.py", line 8, in <module>
    from django.db import models
  File "/usr/local/lib/python3.2/dist-packages/django/db/__init__.py", line 11, in <module>
    if settings.DATABASES and DEFAULT_DB_ALIAS not in settings.DATABASES:
  File "/usr/local/lib/python3.2/dist-packages/django/conf/__init__.py", line 52, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python3.2/dist-packages/django/conf/__init__.py", line 45, in _setup
    % (desc, ENVIRONMENT_VARIABLE))

django.core.exceptions.ImproperlyConfigured: Requested setting DATABASES, 
  but settings are not configured. You must either define the environment 
  variable DJANGO_SETTINGS_MODULE or call settings.configure() 
  before accessing settings.

Як це можна було неправильно налаштувати, коли він працює добре поза інтерпретатором Python? У моїх налаштуваннях Django налаштування DATABASES:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'django_db', # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': 'zamphatta',
        'PASSWORD': 'mypassword91',
        'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '', # Set to empty string for default.
    }
}

... як це неправильно налаштовано?


Це підійшло під час створення нового проекту. Я вважаю це корисним зробити unset DJANGO_SETTINGS_MODULE. Я
зіткнувся

Відповіді:


264

Ви не можете просто запустити Python і перевірити речі, Django не знає, над яким проектом ви хочете працювати. Ви повинні виконати одну з таких дій:

  • Використовуйте python manage.py shell
  • Використовувати django-admin.py shell --settings=mysite.settings(або будь-який модуль налаштувань, який ви використовуєте)
  • Встановіть DJANGO_SETTINGS_MODULEзмінну середовища у вашій ОС наmysite.settings
  • (Це видалено в Django 1.6) Використовуйте setup_environв інтерпретаторі python:

    from django.core.management import setup_environ
    from mysite import settings
    
    setup_environ(settings)

Природно, перший спосіб найпростіший.


Дякую! Це було не зовсім зрозуміло мені в документації, або, можливо, я прочитав його і забув до того часу, як мені це потрібно було зробити.
Зампхатта

6
Як не дивно, це не може знайти файл "mysite.settings", але я бачу, як він сидить там, як mysite / settings.py. Тьфу! Я починаю ненавиджу Джанго.
Зампхатта

3
Так, setup_environвидаляється в 1.6, але --settingsмає працювати. Ви впевнені, що ваші налаштування знаходяться далі FirstBlog.settings, а не лише у settingsпоточному каталозі?
Павло Аноссов

21
Ніщо з вищезгаданого не працювало для мене, але це зробив:$ export DJANGO_SETTINGS_MODULE="my_project.settings"
Thumbz

22
У PyCharm місцем для цього є Run | Редагувати конфігурації | (наприклад, Експертні тести в проекті) | Конфігурація | Довкілля | Змінні середовища: DJANGO_SETTINGS_MODULE=(project directory name).settings
Боб Штейн


26

У 2017 році з django 1.11.5 та python 3.6 ( з коментаря це також працює з Python 2.7 ):

import django
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
django.setup()

У .pyякому ви вводите цей код mysite(батьківський)


Велике спасибі, жодне з інших рішень у моєму випадку не
спрацювало

Працюйте і з python 2.7
Олександр

Це .pyмає бути розміщено в корені , а це означає, що це поряд з Manag.py. Як розмістити його серед випадкових папок?
анонімний

1
Слід зазначити, що це спрацює лише в тому випадку, якщо ви помістите його у верхній частині свого файлу, якщо ви помістите всередину щось подібне, if __name__ == "__main__":воно не буде працювати правильно :)
Джош Коррея

11

На Django 1.9 я спробував django-admin runserverі отримав таку ж помилку, але коли я використав, python manage.py runserverя отримав намічений результат. Це може вирішити цю помилку для багатьох людей!


те саме на django 1.10, але при спробі запустити команду loaddata
amchugh89

4

У моєму випадку я це зрозумів, коли намагався запустити тести Джанго через PyCharm. Я думаю, що це тому, що PyCharm не завантажує початкові налаштування проекту Django, тобто ті, які manage.py shellзапускаються спочатку. Можна додати їх до початку сценарію тестування або просто запустити тести, використовуючи manage.py test.

Версії:

  • Python 3.5 (у віртуальному)
  • PyCharm 2016.3.2 Professional
  • Джанго 1.10

3

в моєму випадку в django 1.10.1, який працює на python2.7.11, я намагався запустити сервер, використовуючи django-admin runserverзамість цього manage.py runserverв моєму каталозі проектів.


0

Для людей, які використовують IntelliJ, за допомогою цих налаштувань я зміг здійснити запит із оболонки (у Windows).

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.