Different database for each django site

后端 未结 1 1671
粉色の甜心
粉色の甜心 2021-01-21 19:58

Suppose we have multiple sites (using sites-framework of Django) running on the same django instance.

MyModel.objects.filter(site_id=request.site, slug=slug)[0]

相关标签:
1条回答
  • 2021-01-21 20:11

    You may create a custom router to do this:

    Example:

    def get_current_site():
       SITE_ID = getattr(settings, 'SITE_ID', 1)
       site_name = Site.objects.get(id=SITE_ID)
       return site_name
    
    
    DATABASE_ROUTERS = ['CustomDatabaseRouter',] #a setting that Django understands.
    
    class CustomDatabaseRouter(object):
    
      def db_for_read(self, model, **hints):
         site_name = get_current_site()
         if site_name  in ['site1']:
             return 'db1'
         if site_name in ['site2']:
            return 'db2'
         return 'default'
    
      def db_for_write(self, model, **hints):
         site_name = get_current_site()
         if site_name  in ['site1']:
             return 'db1'
         if site_name in ['site2']:
            return 'db2'
         return 'default'
    
      def allow_syncdb(self, model, **hints):
         site_name = get_current_site()
         if site_name in ['site1'] and db == 'db1':
             return True
         if site_name in ['site2'] and db == 'db2':
            return True
         return False
    

    You can readup more here https://docs.djangoproject.com/en/dev/topics/db/multi-db/

    0 讨论(0)
提交回复
热议问题