【发布时间】:2016-08-22 01:27:09
【问题描述】:
我正在 Django 框架下建立一个网站,这个网站需要有不同的 SQL 方案,现在我成功创建了所有方案和所有东西,但是我不明白为什么表 django_migrations 在迁移后在每个模式中数据库。
-
预期的数据库内容:
AppDB 表是本应用定义的所有模型
默认数据库表都是 Django 表(admin、contenttypes、auth、sessions)
-
数据库内容:
AppDB表就是这个app+django_migrations定义的所有模型
DEFAULT 表都是 Django 表(admin、contenttypes、auth、sessions)+ django_migrations
这些是 2 个 dbs 的路由器:
class DefaultRouter(object):
APPS = ['auth', 'sessions', 'admin', 'contenttypes']
DB = 'default'
def db_for_read(self, model, **hints):
if model._meta.app_label in self.APPS:
return self.DB
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.APPS:
return self.DB
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label in self.APPS or obj2._meta.app_label in self.APPS:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.APPS:
return db == self.DB
return None
class MyAppDBRouter(object):
def db_for_read(self, model, **hints):
return self.check_app_label(model)
def db_for_write(self, model, **hints):
return self.check_app_label(model)
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'myapp' or obj2._meta.app_label == 'myapp':
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label == 'myapp':
return db == 'appdb'
return None
@staticmethod
def check_app_label(model):
if model._meta.app_label == 'myapp':
return 'appdb'
return None
谢谢。
【问题讨论】:
-
您已经写了一些 cmets 来回复答案,并且当前措辞的问题似乎无法解释您要问的是什么。您能否编辑说明以更好地解释您提出的问题?
标签: python django configuration database-migration multiple-databases