Vâng, nó hơi phức tạp một chút.
Có một số cách bạn có thể triển khai. Về cơ bản, bạn cần một số cách để chỉ ra mô hình nào được kết hợp với cơ sở dữ liệu nào.
Tùy chọn đầu tiên
Đây là mã mà tôi sử dụng; hy vọng nó giúp.
from django.db import connections
class DBRouter(object):
"""A router to control all database operations on models in
the contrib.auth application"""
def db_for_read(self, model, **hints):
m = model.__module__.split('.')
try:
d = m[-1]
if d in connections:
return d
except IndexError:
pass
return None
def db_for_write(self, model, **hints):
m = model.__module__.split('.')
try:
d = m[-1]
if d in connections:
return d
except IndexError:
pass
return None
def allow_syncdb(self, db, model):
"Make sure syncdb doesn't run on anything but default"
if model._meta.app_label == 'myapp':
return False
elif db == 'default':
return True
return None
Cách này hoạt động là tôi tạo tệp có tên cơ sở dữ liệu để sử dụng giữ mô hình của tôi. Trong trường hợp của bạn, bạn sẽ tạo một tệp riêng biệt models
kiểu được gọi là asterisk.py
nằm trong cùng một thư mục với các kiểu cho ứng dụng của bạn.
Trong file models.py
của bạn, bạn muốn thêm
from asterisk import *
Sau đó, khi bạn thực sự yêu cầu một bản ghi từ mô hình đó, nó hoạt động như thế này:
records = MyModel.object.all()
- mô-đun cho
MyModel
là myapp.asterisk
- có kết nối có tên là "dấu hoa thị" để sử dụng.210 nó thay vì "mặc định"
Second Lựa chọn
Nếu bạn muốn có quyền kiểm soát cho mỗi mô hình của sự lựa chọn cơ sở dữ liệu, một cái gì đó như thế này sẽ làm việc:
from django.db import connections
class DBRouter(object):
"""A router to control all database operations on models in
the contrib.auth application"""
def db_for_read(self, model, **hints):
if hasattr(model,'connection_name'):
return model.connection_name
return None
def db_for_write(self, model, **hints):
if hasattr(model,'connection_name'):
return model.connection_name
return None
def allow_syncdb(self, db, model):
if hasattr(model,'connection_name'):
return model.connection_name
return None
Sau đó cho mỗi mô hình:
class MyModel(models.Model):
connection_name="asterisk"
#etc...
Lưu ý rằng tôi chưa thử nghiệm tùy chọn thứ hai này.
Xin lỗi vì phản hồi bị trì hoãn, nhưng điều này vô cùng hữu ích! – HurnsMobile
Xin chào, tôi đã thực hiện tùy chọn thứ hai của bạn. Nó hoạt động tốt ngoại trừ allow_syncdb. Tôi sẽ đăng câu trả lời dưới đây với allow_syncdb đang hoạt động cho bất kỳ người tìm kiếm nào trong tương lai. – Rich
Cảm ơn vì điều này! Tôi đã có một dickens của một thời gian cố gắng để grok này từ các tài liệu django. –