चूंकि Django बॉक्स से बाहर डेटाबेस स्कीमा पोस्टग्रेस का समर्थन नहीं करता है, इसलिए इसे काम करने के लिए, डेटाबेस राउटर का उपयोग करें।
मैंने इसे आज़माने के लिए एक परीक्षण डेटाबेस बनाया है, इसे यहां पुन:पेश करने का तरीका बताया गया है:
psql के साथ एक परीक्षण डेटाबेस बनाएँ:
CREATE USER tester WITH PASSWORD 'lol so easy';
CREATE DATABASE multi_schema_db WITH OWNER tester;
CREATE SCHEMA samples AUTHORIZATION tester;
CREATE TABLE samples.my_samples (
id INTEGER NOT NULL PRIMARY KEY,
description CHAR(255) NOT NULL
);
सेटिंग्स में स्कीमा को विभिन्न डेटाबेस कनेक्शन के रूप में जोड़ें, HOST
add जोड़ना याद रखें "सहकर्मी प्रमाणीकरण विफल" त्रुटि से बचने के लिए।
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'OPTIONS': {
'options': '-c search_path=django,public'
},
'NAME': 'multi_schema_db',
'USER': 'tester',
'PASSWORD': 'lol so easy',
'HOST': 'localhost'
},
'samples': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'OPTIONS': {
'options': '-c search_path=samples,public'
},
'NAME': 'multi_schema_db',
'USER': 'tester',
'PASSWORD': 'lol so easy',
'HOST': 'localhost'
},
}
इसके बाद MySample
बनाएं मॉडल:
from django.db import models
class MySample(models.Model):
description = models.CharField(max_length=255, null=False)
class Meta:
managed = False
db_table = 'my_samples'
नमूना डेटाबेस के लिए सभी नमूना-संबंधित प्रश्नों को निर्देशित करने के लिए एक डेटाबेस राउटर बनाएं:
from database_test.models import MySample
ROUTED_MODELS = [MySample]
class MyDBRouter(object):
def db_for_read(self, model, **hints):
if model in ROUTED_MODELS:
return 'samples'
return None
def db_for_write(self, model, **hints):
if model in ROUTED_MODELS:
return 'samples'
return None
मूल रूप से, राउटर ROUTED_MODELS में निर्दिष्ट सभी मॉडलों को डेटाबेस कनेक्शन samples
पर रूट करेगा और अन्य सभी मॉडलों के लिए कोई नहीं लौटाएं। यह उन्हें default
. पर रूट कर देगा डेटाबेस कनेक्शन।
अंत में राउटर को अपनी सेटिंग्स में जोड़ें.py
DATABASE_ROUTERS = ('database_test.db_router.MyDBRouter',)
और अब MySample
. के लिए क्वेरी करते समय मॉडल, यह samples
. से डेटा लाएगा स्कीमा।