2016-09-27 4 views
10

मैं अपने Django (v1.10) ऐप डीबी को किसी अन्य पायथन स्क्रिप्ट से एक्सेस करने की कोशिश कर रहा हूं और ऐसा करने में कुछ परेशानी है।Django स्टैंडअलोन स्क्रिप्ट

यह मेरी फ़ाइल और फ़ोल्डर संरचना है:

store 
store 
    __init.py__ 
    settings.py 
    urls.py 
    wsgi.py 
store_app 
    __init.py__ 
    admin.py 
    apps.py 
    models.py 
    ... 
db.sqlite3 
manage.py 

other_script.py 

Django's documentations मेरी other_script.py के अनुसार इस तरह दिखता है:

import django 
from django.conf import settings 

settings.configure(DEBUG=True) 
django.setup() 

from store.store_app.models import MyModel 

लेकिन यह एक रनटाइम त्रुटि उत्पन्न करता है:

RunTimeError: Model class store.store_app.models.MyModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS. 

मुझे ध्यान रखना चाहिए कि मेरी INSTALLED_APPS सूची में शामिल है store_app अपने अंतिम तत्व के रूप में।

, तो इसके बजाय मैं इस तरह एक config पारित करने के लिए प्रयास करें:

import django 
from django.conf import settings 
from store.store_app.apps import StoreAppConfig 

settings.configure(StoreAppConfig, DEBUG=True) 
django.setup() 

from store.store_app.models import MyModel 

मैं:

AttributeError: type object 'StoreAppConfig has no attribute 'LOGGING_CONFIG'. 

अगर मैं settings.py को संपादित करने और LOGGING_CONFIG=None जोड़ने तो मैं एक और लापता विशेषता के बारे में एक और त्रुटि मिलती है, और पर।

किसी भी सुझाव की सराहना की जाएगी।

+0

क्या यह वर्चुअल वातावरण का उपयोग कर रहा है? – FeedTheWeb

+0

@lxer: नहीं, यह –

+0

नहीं है, आपका बाकी Django ऐप वर्चुअल एनवी के बिना काम करता है? एक अन्य खोज: जब आप सीधे स्क्रिप्ट शुरू करते हैं तो क्या होता है? ('पायथन yourscript.py') – FeedTheWeb

उत्तर

16

इस

import sys, os, django 
sys.path.append("/path/to/store") #here store is root folder(means parent). 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "store.settings") 
django.setup() 

from store_app.models import MyModel 

यह स्क्रिप्ट आप अपने सिस्टम में कहीं भी उपयोग कर सकते हैं की कोशिश करो।

+0

बढ़िया! नोट: मुझे काम करने के लिए 'store.store.settings" का उपयोग करने की आवश्यकता है। –

0

store_app.models से आयात करने का प्रयास करें - आसपास के store फ़ोल्डर एक पायथन मॉड्यूल नहीं है और आयात करते समय इसका उपयोग नहीं किया जाना चाहिए।

import django 
from django.conf import settings 

settings.configure(DEBUG=True) 
django.setup() 

from store_app.models import MyModel 

अपडेट: मैंने अभी देखा है कि आपने अपने प्रोजेक्ट फ़ोल्डर के बगल में उस स्क्रिप्ट को रखा है - आपको इसे काम करने के लिए अंदर ले जाना चाहिए।

+0

my_script एक अलग पैकेज में नहीं हो सकता है? –

+0

यह कर सकता है, लेकिन यह आपके पथ पर निर्भर करता है - आमतौर पर एक डीजेंगो परियोजना पथ में नहीं होती है, इसलिए मैंने आपको इसे स्थानांतरित करने की सलाह दी। फिर भी - अगर आपको django के अलावा भागना नहीं चाहिए, तो आपको @ विथनेल का उल्लेख करना चाहिए। – dahrens

8

यह Django Management commands. के लिए एक महान उपयोग केस की तरह लगता है जिसमें अतिरिक्त बोनस है जिसे आप क्रोन से सीधे चला सकते हैं, कमांडलाइन से सीधे, या अंदर django से कॉल कर सकते हैं। यह स्क्रिप्ट को आपकी मुख्य परियोजना के समान सेटिंग्स और पर्यावरण चरों तक पूर्ण पहुंच प्रदान करता है।

यदि आप इसे एक उचित निर्देशिका में ले जाते हैं - यहां एक उदाहरण के रूप में स्टोर का उपयोग करके, कोई सुझाव नहीं, इसे काम करना चाहिए।

store 
    management 
    __init__.py 
     commands 
     __init__.py 
     otherscript.py 
संबंधित मुद्दे