Неправильная метка model._meta.app_label (из другого приложения) в маршрутизаторе базы данных Django
У меня есть две различные базы данных SQL и три приложения в моем проекте django.
Приложения называются PROD, TEST и common.
Я пытаюсь направить все, что приходит по url из PROD в models.py из PROD и базы данных1, и все, что приходит по url из TEST в models.py из TEST и базы данных2.
TEST
-- models.py
PROD
-- models.py
common
Все работало нормально, пока я не ввел 'common' (после клонирования проекта в другую папку) и я не знаю почему.
settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'cfg_db_ic2_net_dev_test',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
},
'proddb': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'cfg_db_ic2_net_dev_prod',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
DATABASE_ROUTERS = ['PROD.dbRouter.ProdDBRouter']
PROD/dbRouter.py:
def db_for_read(self, model, **hints):
"Point all operations on prod models to 'proddb'"
from django.conf import settings
print(model._meta.app_label)
if model._meta.app_label == 'PROD':
return 'proddb'
return None
...
PROD/views.py:
def hosts(request):
print("I did this")
return render(request=request, template_name="common/hosts.html", context={"hosts": NetDefined.objects.all, "landscape": landscape})
Модели models.py для каждого TEST и PROD практически идентичны.
Проблема в том, что шаблон hosts.html заполняется данными из базы данных по умолчанию, а не из базы данных proddb.
Причина этого в том, что DBRouter не распознает model._meta.app_label модели, он говорит, что это "TEST". Несмотря на то, что url определенно маршрутизируется правильно, печатается "I did this".
Это произошло только после переустановки проекта и внедрения третьего приложения.
Итак, мой вопрос: почему Django не распознает, что используются представления и модели из "PROD" и вместо этого предоставляет маршрутизатору неправильную метку app_label?
Спасибо за помощь!