class MultiDbModel(models.Model):
class Meta:
abstract = True
def save(self, *args, **kwarg
for dbname in settings.DATABASES:
super(MultiDbModel, self).save(using=dbname)
if isinstance(model,User):
return True
elif isinstance(model,Session):
return True
else:
''' something appropriate
whatever your sharding schema is for other objects '''
class MyUser(models.Model):
name = models.CharField(max_length=100)
user = models.ForeignKey(User, unique=True)
def save(self, ...): # ALL the signature
super(MyUser, self).save(using='database_1')
super(MyUser, self).save(using='database_2')
首先,我认为您需要更多的是一个SSO框架,比如in this post
我试过穆阿德的答案,但我无法让班级装饰师工作。。。在我看来,这个解决方案不允许在模型中使用自定义save()。在
更适合我的需要,我定义了一个自定义泛型类并简单地重写save()函数。在
然后:
^{pr2}$我现在正在研究Django切分模式。在
我看了看Django路由器,但决定自己动手。在
关于您的问题的一些想法:
有点像
保存用户对象(至少在一个DB模型上)似乎是通过内部发生的各种魔法在幕后保存会话、身份验证等数据django.contrib公司,因此,您可能不必进入并找出所有这些数据库表的名称和类型。在
为了支持这种工作的可能性,我发誓我最近在某个地方读到(可能是在Alex Gaynor的一篇博客文章中),如果一个对象有外键Django将尝试使用该对象所在的同一个DB(从Django通常的操作方式来看,原因很明显)。在
从您引用的Django multiDB页面上的示例中,我想知道下面这样的方法是否可行:
他们的示例代码:
^{pr2}$可能的修改:
def allow_syncdb(self,db,model):
再看一看,这个代码作为“db_for_write”函数可能更有用。但你明白了。在
毫无疑问,这是其他类型的作品。在
祝你好运!希望这对你有所帮助。在
我对你的发现和评论很感兴趣!在
jb
我认为您最好实现SSO或OAuth服务
但是如果您想在两个数据库之间同步表用户,并且您使用自己的UserModel,您可以这样做
您也可以使用这样的decorator,像这样您也可以使用它来同步其他表:
^{pr2}$希望这会有帮助:)
相关问题 更多 >
编程相关推荐