2010-08-19 13 views
18

क्या यह निर्दिष्ट करने का कोई तरीका है कि एक मॉडल (या ऐप, यहां तक ​​कि) केवल एक विशेष डेटाबेस का उपयोग करना चाहिए?Django - मॉडल के लिए डेटाबेस निर्दिष्ट कैसे करें?

मैं एक विरासत डेटाबेस के साथ काम कर रहा हूं जिसे मैं बदलना नहीं चाहता हूं। मेरे पास दो डेटाबेस हैं - 'डिफ़ॉल्ट' एक स्क्लाइट है जिसे व्यवस्थापक आदि के लिए उपयोग किया जा सकता है, और विरासत एक। मैंने विरासत डेटाबेस का (भाग) के लिए मॉडल बनाने के लिए इंस्पेक्टडब का उपयोग किया, और इसमें managed = False है। लेकिन क्या मॉडल में निर्दिष्ट करने का कोई तरीका है कि यह केवल एक विशेष डेटाबेस पर लागू होता है?

मुझे लगता है कि आप कुछ प्रश्न सेट आदि में specify using=databasename कर सकते हैं लेकिन यह Databrowse (और संभवतः सामान्य दृश्य भी) जैसी चीज़ों के लिए अच्छा नहीं है। यह डाटाबेस का संक्षिप्त आ सकता है कि आप डेटाबेस निर्दिष्ट नहीं कर सकते हैं, लेकिन यह सिर्फ यह निर्दिष्ट करने के लिए सही जगह जैसा लगता है ...

तब मैंने सोचा कि शायद जवाब एक कस्टम लिखना है model manager जो केवल मेरे विरासत डेटाबेस को संदर्भित करता है - लेकिन दस्तावेज़ों में ऐसा कुछ भी उल्लेख नहीं है।

क्या मेरे पास सिर्फ एक अलग मानसिक मॉडल है जो Django दुनिया में कितने डेटाबेस का उपयोग किया जा सकता है?

उत्तर

10

जहाँ तक मुझे पता है कि तुम क्योंकि यह एक तरह से कभी पुन: प्रयोज्य होने से रोका जा सके एप्लिकेशन मॉडल के साथ सीधे डेटाबेस निर्दिष्ट नहीं कर सकते, लेकिन जैसा कि से मैं क्या डॉक्स में देख सकते हैं:

https://docs.djangoproject.com/en/1.8/topics/db/multi-db/

2

आप मॉडल के लिए डेटाबेस निर्दिष्ट नहीं कर सकते हैं, लेकिन आप इसे एक कस्टम डीबी राउटर क्लास में परिभाषित कर सकते हैं।

# app/models.py 
class SomeModel(models.Model): 
    ... 

# app/dbrouters.py 
from app.models import SomeModel 
... 
class MyDBRouter(object): 

    def db_for_read(self, model, **hints): 
     """ reading SomeModel from otherdb """ 
     if model == SomeModel: 
      return 'otherdb' 
     return None 

    def db_for_write(self, model, **hints): 
     """ writing SomeModel to otherdb """ 
     if model == SomeModel: 
      return 'otherdb' 
     return None 


# app/settings.py 
DATABASE_ROUTERS = ('app.dbrouters.MyDBRouter',) 
... 
DATABASES = { 
    ... 
    'otherdb': { 
     .... 
    } 
} 
संबंधित मुद्दे