2012-04-18 43 views
0

因此,我阅读了多个数据库文档https://docs.djangoproject.com/en/dev/topics/db/multi-db/,这是非常有帮助的。我得到了如何在setting.py中显示第二个数据库以及如何通过命令提示符同步它。但我无法弄清楚的是如何指定如何使某个模型同步/保存在第二个数据库中。特别是如果我没有明确说明的话。多个数据库帮助? (Django)

喜欢用户。

如果我使用django的用户类来创建用户,并且我如何将它保存到第二个数据库?

回答

1

请仔细阅读您提供的文档。该文档的Automatic databse routing部分完全回答您的问题。
用户数据库的路由取决于您的实际使用情况和分区策略,没有一个句子答案。用户可以在文档中找到示例,您可以阅读并签入本地计算机。

+0

我想我只有一个问题。我在哪里放数据库路由类?在models.py中? – city 2012-04-18 16:15:42

+0

@ user1316042它是通过'DATABASE_ROUTERS'中定义的路径导入的,路径只要可以找到就可以在任何地方。例如,你可以把它放在settings.py中,并将'DATABASE_ROUTERS'设置为'''settings.MyRouter']' – okm 2012-04-18 16:36:34

+0

Hmmph。我遇到了问题,因为用户不能在我的模型中定义。因此我无法给它一个verbose_name,我正在使用它来路由模型。现在我将所有模型的verbose_name设置为'cash',但是为什么我会尝试使用路由器,因为我无法/没有定义用户,我必须使用'if model._meta.verbose_name!='现金':'当我得到allow_syncdb时,这让我陷入了一些问题。 – city 2012-04-18 18:04:56

1

(代码直接从Django文档:https://docs.djangoproject.com/en/dev/topics/db/multi-db/#automatic-database-routing

路由器处理在数据库中的数据应该被获取或设置

如果你想为你的应用程序中的路由器(名为“MYAPP”)

class MyAppRouter(object): 
     """A router to control all database operations on models in 
     the myapp application""" 

     def db_for_read(self, model, **hints): 
      "Point all operations on myapp models to 'other'" 
      if model._meta.app_label == 'myapp': 
       return 'other' 
      return None 

     def db_for_write(self, model, **hints): 
      "Point all operations on myapp models to 'other'" 
      if model._meta.app_label == 'myapp': 
       return 'other' 
      return None 

     def allow_relation(self, obj1, obj2, **hints): 
      "Allow any relation if a model in myapp is involved" 
      if obj1._meta.app_label == 'myapp' or obj2._meta.app_label == 'myapp': 
       return True 
      return None 

     def allow_syncdb(self, db, model): 
      "Make sure the myapp app only appears on the 'other' db" 
      if db == 'other': 
       return model._meta.app_label == 'myapp' 
      elif model._meta.app_label == 'myapp': 
       return False 
      return None 

通过在settings.py中添加下一行,将在其自己的数据库(名为“其他”)中创建/保存/处理所有'myapp'应用程序数据,其余所有应用程序使用默认数据库

DATABASE_ROUTERS = ['path.to.MyAppRouter'] 

路由器可以保存在任何你想要的地方。只需修复settings.DATABASE_ROUTERS的路径即可。