2

我正在开发一个需要两个数据库的项目——一个用于“注销”部分,一个用于登录。我需要将身份验证(以及内容类型)应用程序同步到两个数据库,这工作正常。但是,用于创建默认 Permission 和 ContentType 对象的 auth 和 contenttypes 的管理命令并未在登录的数据库上运行,仅在默认数据库上运行。我有这个权利吗?

我的数据库路由器

LOGGED_IN_APPS = ('avatar', 'guardian', 'money', 'ipn', 'schedule', 'studio')
COMMON_APPS = ('auth', 'contenttypes', 'registration')

class MyRouter(object):
    def db_for_read(self, model, **hints):
        if model._meta.app_label in LOGGED_IN_APPS:
            return 'logged_in'
        return None

    def db_for_read(self, model, **hints):
        if model._meta.app_label in LOGGED_IN_APPS:
            return 'logged_in'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if obj1._meta.app_label in LOGGED_IN_APPS or obj2._meta.app_label in LOGGED_IN_APPS:
            return True
        return None

    def allow_syncdb(self, db, model):
        if db == 'logged_in':
            return model._meta.app_label in LOGGED_IN_APPS or model._meta.app_label in COMMON_APPS
        elif model._meta.app_label in LOGGED_IN_APPS:
            return False
        return None
4

1 回答 1

1

这就是我所做的。首先,没有办法告诉 syncdb 在特定数据库上创建权限——它总是会选择默认值。所以,由于这个项目的性质,我能够将它分成两个项目,每个项目都有自己的数据库。这为我解决了这个问题,但不幸的是,Django 需要修补以支持在多个数据库上执行此操作。

于 2010-08-20T20:34:18.683 回答