मुझे एक ही समस्या का सामना करना पड़ा (Django 1.11 का उपयोग करके) और यह प्रश्न इसके लिए मेरे Google परिणामों में सबसे ऊपर था।
आपके प्रारंभिक समाधान में केवल एक महत्वपूर्ण भाग छूट रहा है। आपको Django को यह बताना होगा कि कौन से डेटाबेस मॉडल 'सी' और 'डी' उपयोग कर रहे हैं। मेरे लिए क्या काम किया:
class ExternalModel(models.Model):
class Meta:
managed = False
abstract = True
app_label = 'support'
फिर अपने डेटाबेस राउटर को बताएं कि जब वह app_label को allow_migrate() सेक्शन में मिलता है तो उसे कैसा व्यवहार करना चाहिए:
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label == 'support':
return False
return (db == 'default')
मुझे यकीन नहीं है कि यह Django टीम की नजर में सबसे सही-समाधान है, लेकिन प्रभाव allow_migrate() है जो उस app_label विशेषता मान के साथ परिभाषित किसी भी मॉडल के लिए False लौटा रहा है।
Django डॉक्यूमेंटेशन ऑन राउटर्स यह स्पष्ट रूप से उल्लेख नहीं करता है (या, कम से कम मॉडल कोड नमूने के साथ जो यह स्पष्ट करता है कि ओआरएम 'डीबी' के मान को allow_migrate() पर कैसे पास करता है), लेकिन 'app_label' और 'प्रबंधित' विशेषताओं के बीच आप इसे प्राप्त कर सकते हैं काम करने के लिए*।
* मेरे मामले में डिफ़ॉल्ट पोस्टग्रेज है और रीड-ओनली डेटाबेस Oracle 12 cx_Oracle के माध्यम से है।