Таблица отправки маршрутизатора БД Django в БД по умолчанию вместо правильной

Я создаю сайт, который будет подключен к 4 базам данных. У меня первые три прошли без проблем. Я создал отдельное приложение для каждого БД, а затем создал маршрутизатор для каждого. Проблема с последним БД в том, что роутер не запускается. Он продолжает посылать трафик в базу данных по умолчанию. База данных по умолчанию - app2, а база данных, которую я хочу использовать, - "Login". Вот мой роутер

 class LoginRouter(object):
     def db_for_read(self, model):

         if model._meta.app_label == 'Login':
             return 'Login'
         return 'default'

Вот моя декларация настроек:

 DATABASE_ROUTERS = ['reports.dbrout.CucRouter', 'reports.dbrout.CpsgRouter', 'reports.dbrout.LoginRouter', ]

Вот модель в приложении "Логин", которая не подключается к нужной базе данных.

 from __future__ import unicode_literals

 from django.db import models


 class TblUsers(models.Model):
     userid = models.AutoField(db_column='userID', primary_key=True)
     username = models.CharField(db_column='userName', max_length=100)  
     useremail = models.CharField(db_column='userEmail', unique=True, max_length=100) 
     userpass = models.CharField(db_column='userPass', max_length=100) 
     userstatus = models.CharField(db_column='userStatus', max_length=1)  
     tokencode = models.CharField(db_column='tokenCode', max_length=100)  
     companyid = models.CharField(db_column='companyID', max_length=255, blank=True, null=True)
     fk_customer = models.IntegerField(blank=True, null=True)
     is_admin = models.IntegerField(blank=True, null=True)

     class Meta:
         managed = False
         db_table = 'tbl_users'
         app_label = 'Login'

     def __str__(self):
         return str(self.userid)

Полная страница dbrout:

 class CucRouter(object):
     def db_for_read(self, model):

         if model._meta.app_label == 'CUCMCDR':
             return 'CUCMCDR'
         return 'default'


  class CpsgRouter(object):
      def db_for_read(self, model):

         if model._meta.app_label == 'CPSG':
             return 'CUCMCDR'
         return 'default'


 class LoginRouter(object):
     def db_for_read(self, model):

         if model._meta.app_label == 'Login':
             return 'Login'
         return 'default'

Как я уже сказал, это сработало для первых трех. Что мне здесь не хватает, что не цепляет за последний!!???

1 ответ

Решение

Порядок, в котором обрабатываются маршрутизаторы, имеет большое значение. Маршрутизаторы будут запрашиваться в том порядке, в котором они перечислены в DATABASE_ROUTERS установка.
Добавьте это, как показано ниже.
DATABASE_ROUTERS = ['reports.dbrout.LoginRouter','reports.dbrout.CucRouter', 'reports.dbrout.CpsgRouter',]

При настройке убедитесь, что ваш заказ, если Login app_label используется в LoginRouter а также CucRouter затем LoginRouter будет обрабатывать раньше CucRouter

Другие вопросы по тегам