2016-02-14 4 views
27

में किसी एप्लिकेशन में नहीं है, मैं Django Rest Framework और AngularJs के साथ एक एप्लिकेशन बना रहा हूं। मैं अपने प्रमाणीकरण उद्देश्यों के लिए Django-rest-auth का उपयोग कर रहा हूं, हालांकि, मैं इसे सेट करने में सक्षम नहीं हूं। वैसे भी, मैं अपनी परियोजना के साथ इस app को स्थापित करने की कोशिश कर रहा हूं। मुझे एहसास हुआ कि मैं Django-बाकी लेखन पंजीकरण इसे चलाने करने के लिए स्थापित करने की आवश्यकता है, इसलिए मैं इस documentation पीछा निम्नलिखित बातें करने के लिए:रनटाइम त्रुटि: मॉडल वर्ग django.contrib.sites.models.Site एक स्पष्ट app_label घोषित नहीं करता है और INSTALLED_APPS

मैं भाग गया आदेशों

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', 
] 

मैंने प्रमाणीकरण बैकएंड, context_processors, और उचित यूआरएल भी जोड़ा है।

हालांकि, जब मैं विस्थापित करने के लिए प्रयास करते हैं, मेरी टर्मिनल निम्न त्रुटि फेंकता है:

RuntimeError: Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

मैं यह त्रुटि क्यों मिलता है, और मैं इसे अपने प्रोजेक्ट माइग्रेट करने का तरीका को हल करते हैं? धन्यवाद!

उत्तर

66

ठीक

बस अपनी सेटिंग्स में 1 करने के लिए Django के Sites framework अपने ऐप्स पर और सेट SITE_ID जोड़ें।

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

SITE_ID = 1 

ऐसा क्यों होता है?

Django's Sites Framework कि विभिन्न साइटों के साथ एक एकल Django आवेदन/codebase का उपयोग (है कि विभिन्न डेटाबेस, विचारों में तर्क, आदि का उपयोग कर सकते हैं) के लिए अनुमति देता कोर पुस्तकालय के साथ बंडल एक योगदान मॉड्यूल है। SITE_ID setting, जैसा कि दस्तावेज़ों में बताया गया है, "का उपयोग किया जाता है ताकि एप्लिकेशन डेटा विशिष्ट साइटों में हो सके और एक डेटाबेस कई साइटों के लिए सामग्री का प्रबंधन कर सके।"

इस विशेष मामले में AllAuth requires the Sites Framework ठीक से काम करने के लिए। कई अन्य तृतीय-पक्ष पुस्तकालयों को ऐसे मामलों को सुरक्षित रूप से प्रबंधित करने के लिए बनाया गया है जहां कई साइटें मौजूद हो सकती हैं और यह सर्वोत्तम हो सकती है।

+0

मेरी समस्या फिक्स्ड, बंद फिक्सिंग 'ImportError देखने के लिए: अब नाम RequestSite' समस्या आयात नहीं कर सकते :-) –

+1

धन्यवाद दोस्त, तुम मेरा दिन बचाओ! बहुत बहुत धन्यवाद। –

+1

यह समस्या को हल करता है, लेकिन यह कहां से आता है? – erikbwork

8

मैं इस पोस्ट पर Google खोज के माध्यम से उतर गया।

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

यह पूर्ण आयात के साथ पायथन 2.7.x पर चल रहा था: मेरी समस्या परीक्षण है कि त्रुटि के साथ फट गया था चल रहा था। जैसा कि नीचे टिप्पणी में कोल्टन हिक्स द्वारा वर्णित है, यह पाइथन 3 के साथ भी हो सकता है (Django 1.11.4 के साथ सबसे पुराना 3.2.3)।

मेरी tests.py में:

+0

एक समान समस्या थी लेकिन पायथन 3 चला रहा था। मेरी test.py फ़ाइल में मैं एक दृश्य के सापेक्ष आयात का उपयोग कर रहा था जिसे मैं 'अवलोकन आयात से नवीनतम खाता' का परीक्षण करना चाहता था। मैं जो त्रुटि प्राप्त कर रहा था वह test.py फ़ाइल में उपयोग किए गए मॉडल के लिए भी नहीं था। फिर भी उस सापेक्ष आयात को हटाकर और इसे एक पूर्ण आयात के साथ बदलकर इस मुद्दे को हल किया गया। –

+0

@ कोल्टनहिक्स ने किस परीक्षण धावक के साथ ऐसा किया; मैं आपके जवाब में अपने पायथन 3 निष्कर्षों में संशोधन करूंगा। – berto

+0

मैं एक django 1.11.4 ऐप के अंदर pytest 3.2.3 का उपयोग कर रहा था। –

1

मैं ऊपर त्रुटि मिली

from taxonomy.models import Demographics, Term 

HTH:

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

एक पूर्ण आयात के सापेक्ष आयात बदलने के बाद समस्या दूर चला गया। हालांकि मेरी समस्या urls.py में थी। मैं Pydanny cookiecutter django नुस्खा का पालन कर रहा था।

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

जब मैं इस के लिए सही:

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

सब कुछ ठीक था मेरे त्रुटि urls.py में इस लाइन डालने के लिए किया गया था। मैं भी अपने स्थानीय क्षुधा (मैं यह पहली और इतनी गंभीर त्रुटि url गलत कॉन्फ़िगरेशन था) बदल दिया है:

LOCAL_APPS = [ 
    # Your stuff: custom apps go here 
    'demoapp.apps.DemoAppConfig', 
] 
संबंधित मुद्दे