Django DB सेटिंग्स 'अनुचित रूप से कॉन्फ़िगर' त्रुटि


170

Django (1.5) मेरे लिए ठीक है, लेकिन जब मैं कुछ चीजों की जांच करने के लिए पायथन इंटरप्रेटर (पायथन 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.

जब यह पायथन दुभाषिया के बाहर ठीक काम करता है, तो इसे अनुचित रूप से कैसे कॉन्फ़िगर किया जा सकता है? मेरी 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। मैं एक मुद्दे में भाग रहा था जहाँ मैंने अपने .bashrc में env var को सेट किया था
fncomp

जवाबों:


264

आप सिर्फ पायथन को फायर नहीं कर सकते हैं और चीजों की जांच कर सकते हैं, Django नहीं जानता कि आप किस प्रोजेक्ट पर काम करना चाहते हैं। आपको इनमें से एक काम करना है:

  • उपयोग python manage.py shell
  • उपयोग करें django-admin.py shell --settings=mysite.settings(या जो भी सेटिंग मॉड्यूल आप उपयोग करते हैं)
  • DJANGO_SETTINGS_MODULEअपने ओएस में पर्यावरण चर सेट करेंmysite.settings
  • (यह Django 1.6 में हटा दिया गया है) setup_environअजगर दुभाषिया में उपयोग करें :

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

स्वाभाविक रूप से, पहला तरीका सबसे आसान है।


धन्यवाद! प्रलेखन में मेरे लिए यह बिल्कुल स्पष्ट नहीं था, या शायद मैंने इसे पढ़ा और उस समय तक भूल गया जब मुझे ऐसा करने की आवश्यकता थी।
जम्पहट्टा

6
अजीब तरह से यह 'mysite.settings' फ़ाइल को खोजने के लिए प्रतीत नहीं हो सकता है, लेकिन मैं इसे mysite / settings.py के रूप में वहीं बैठे देख सकता हूं। ओह! मैं Django से नफरत करने लगा हूं।
जम्पहट्टा

3
हां, setup_environ1.6 में हटा दिया जाता है, लेकिन --settingsकाम करना चाहिए। क्या आप सुनिश्चित हैं कि आपकी सेटिंग्स अभी और आगे हैं FirstBlog.settings, न कि केवल settingsवर्तमान निर्देशिका में?
पावेल Anossov

21
उपरोक्त में से किसी ने भी मेरे लिए काम नहीं किया, लेकिन इसने एक काम किया:$ export DJANGO_SETTINGS_MODULE="my_project.settings"
थम्बज़

22
में PyCharm यह करने के लिए जगह भागो है | विन्यास संपादित करें | (जैसे परियोजना में Unittests) | विन्यास | पर्यावरण | पर्यावरण चर: DJANGO_SETTINGS_MODULE=(project directory name).settings
बॉब स्टीन


26

2017 में django के साथ 1.11.5 और अजगर 3.6 ( टिप्पणी से यह पायथन 2.7 के साथ भी काम करता है ):

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

.pyजिसमें आप इस कोड डाल में होना चाहिए mysite(माता-पिता से एक)


बहुत बहुत धन्यवाद, किसी भी अन्य समाधान ने मेरे मामले में काम नहीं किया है
evnica

अजगर 2.7 के साथ भी काम करें
Александр

इसे रूट.py पर रखा जाना चाहिए , जिसका अर्थ यह है कि यह मैनेजमेन्थ के साथ है। मैं इसे यादृच्छिक फ़ोल्डरों के अंदर कैसे रखूं?
अनाम

1
यह ध्यान दिया जाना चाहिए कि यह केवल तभी काम करेगा जब आप इसे अपनी फ़ाइल के शीर्ष पर रखते हैं, अगर आप इसे किसी चीज़ के अंदर डालते हैं जैसे if __name__ == "__main__":यह सही ढंग से काम नहीं करेगा :)
जोश कोर्रेया

11

Django 1.9 पर, मैंने कोशिश की django-admin runserverऔर वही त्रुटि मिली, लेकिन जब मैंने उपयोग किया तो python manage.py runserverमुझे इच्छित परिणाम मिला। यह बहुत से लोगों के लिए इस त्रुटि को हल कर सकता है!


वही, django पर 1.10, लेकिन कमांड
लोडाटा

4

मेरे मामले में, मुझे यह तब मिला जब पाइकहार्म के माध्यम से Django परीक्षण चलाने की कोशिश कर रहा था। मुझे लगता है कि यह इसलिए है क्योंकि PyCharm प्रारंभिक Django परियोजना सेटिंग्स को लोड नहीं करता है, अर्थात जो manage.py shellशुरू में चलती है। कोई उन्हें परीक्षण स्क्रिप्ट की शुरुआत में जोड़ सकता है या केवल परीक्षण का उपयोग करके चला सकता है manage.py test

संस्करण:

  • पायथन 3.5 (virtualenv में)
  • PyCharm 2016.3.2 पेशेवर
  • Django 1.10

3

अपने स्वयं के मामले में django 1.10.1 python2.7.11 पर चल रहा है, मैं अपनी परियोजना निर्देशिका के django-admin runserverबजाय सर्वर का उपयोग शुरू करने की कोशिश कर रहा था manage.py runserver


0

IntelliJ का उपयोग करने वाले लोगों के लिए, इन सेटिंग्स के साथ मैं शेल (विंडोज़ पर) से क्वेरी करने में सक्षम था।

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.