0

データベースルーターを選択するにはどうすればよいですか? サブドメインを扱っていますが、たとえばapp1.domain.deルーティングされている場合は、データベース ルーターを変更したいと考えています。誰か助けてくれませんか?

    DATABASES = {                                                                                                                                                                                                                              
'default': {                                                                                                                                                                                                                           
    'ENGINE': 'django.db.backends.sqlite3',                                                                                                                                                                                            
    'NAME': os.path.join(SITE_ROOT, 'db') + '/default.db',                                                                                                                                                                                
    'USER': '',                                                                                                                                                                                                                        
    'PASSWORD': '',                                                                                                                                                                                                                    
    'HOST': '',                                                                                                                                                                                                                        
    'PORT': '',                                                                                                                                                                                                                        
},                                                                                                                                                                                                                                     
'app1': {                                                                                                                                                                                                                         
    'ENGINE': 'django.db.backends.sqlite3',                                                                                                                                                                                            
    'NAME': os.path.join(SITE_ROOT, 'db') + '/app1.db',                                                                                                                                                                           
    'USER': '',                                                                                                                                                                                                                        
    'PASSWORD': '',                                                                                                                                                                                                                    
    'HOST': '',                                                                                                                                                                                                                        
    'PORT': '',                                                                                                                                                                                                                        
},                                                                                                                                                                                                                                     
'app2': {                                                                                                                                                                                                                             
    'ENGINE': 'django.db.backends.sqlite3',                                                                                                                                                                                            
    'NAME': os.path.join(SITE_ROOT, 'db') + '/app2.db',                                                                                                                                                                               
    'USER': '',                                                                                                                                                                                                                        
    'PASSWORD': '',                                                                                                                                                                                                                    
    'HOST': '',                                                                                                                                                                                                                        
    'PORT': '',                                                                                                                                                                                                                        
},                                                                                                                                                                                                                                     
}     

   DATABASE_ROUTERS = ['app1.routers.DatabaseRouter', 'app2.routers.DatabaseRouter']   

  /app1/routers.py                                                                                                                                                             
  class DatabaseRouter(object):                                                                                                                                                                                                                                                                                                                                                                                                                                                    
      def db_for_read(self, model, **hints):                                                                                                                                                                                                                                                                                                                                                                                                                           
         return "app1"                                                                                                                                                                                                                       

      def db_for_write(self, model, **hints):                                                                                                                                                                                                
         return "app1" 

/app2/routers.py                                                                                                                                                             
class DatabaseRouter(object):                                                                                                                                                                                                                                                                                                                                                                                                                                                    
    def db_for_read(self, model, **hints):                                                                                                                                                                                                                                                                                                                                                                                                                           
        return "app2"                                                                                                                                                                                                                       

    def db_for_write(self, model, **hints):                                                                                                                                                                                                
        return "app2" 
4

2 に答える 2

0

要求されたモデルのモデル/テーブルを保持している場合、DB ルーターはデータベース名を返す必要がありますNone。あなたの場合、ルーターは常に返さapp1れるか、app2どちらが間違っていますか。

これが私がそれをどのように使用するかについてのサンプルです:

class AuditDBRouter(object):
    """
     A router to controll audit db operations
    """
    def db_for_read(self, model, **hints):
        "Point all operations on audit models to 'audit'"
        from django.conf import settings
        #admin do not want separate DB?
        if not settings.DATABASES.has_key('audit'):
            return None
        #return our DB name
        if model._meta.app_label == 'audit':
            return 'audit'
        #we don't serve this.
        return None
于 2012-09-11T13:30:15.807 に答える