Застрял при интеграции нескольких Django баз данных - PullRequest
0 голосов
/ 20 июня 2020

Я новичок в Django, но, похоже, не могу решить эту проблему. Сцена: у меня есть новый проект Django, который я хочу использовать в качестве API. У меня есть база данных по умолчанию, и он отлично работает, когда я пытаюсь просмотреть таблицы в своей панели администратора (только таблица - это таблица пользователя)

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

Я смог добавить базу данных в свой список баз данных в settings.py, я также запустил inspectdb и свои модели были созданы, я выполнил свои миграции, и я могу просматривать объекты модели из команды оболочки.

Challenge

Итак, у меня есть модели, зарегистрированные в моем файле admin.py, и я могу найти две сгенерированные таблицы в панели администратора при входе в систему, но когда я пытаюсь щелкнуть по нему, чтобы просмотреть, я получаю сообщение об ошибке, что таблица не существует. Я смог сделать вывод, что проблема заключается в том, что когда я пытаюсь открыть любую из этих двух сгенерированных таблиц в панели администратора, Django ищет эти таблицы в базе данных по умолчанию, а не в устаревшей базе данных.

Решения, которые я пробовал

Я действительно пробовал использовать routers.py, но, думаю, мне не удалось получить правильный синтаксис, учитывая тот факт, что я использую только одно приложение, но несколько баз данных. просто сводит меня с ума, честно

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'thelwk_rest',
        'USER': 'webmaster',
        'PASSWORD':'**************',
        'HOST':'10.01.01.01',
        'PORT':'3306',
    },
    'lwkdata': {
        'ENGINE':'django.db.backends.mysql',
        'NAME':'thelwk_data',
        'USER':'webmaster',
        'PASSWORD':'**************',
        'HOST':'10.01.01.01',
        'PORT':'3306',
    }
}

tinker = Trends.objects.using('lwkdata').get(id=72)
#gives me my desired results

Мои настройки admin.py

from django.contrib import admin
from profiles_api import models
from profiles_api import models2


admin.site.register(models.UserProfile)
admin.site.register(models2.ThelwkRestNtflx)
admin.site.register(models2.Trends)

Ошибка, которую я получаю, когда пытаюсь открыть таблица в админке


ProgrammingError at /admin/profiles_api/trends/
(1146, "Table 'thelwk_rest.trends' doesn't exist")
Request Method: GET
Request URL:    http://127.0.0.1:8000/admin/profiles_api/trends/

1 Ответ

0 голосов
/ 21 июня 2020

Маршрутизатор базы данных, подобный приведенному ниже, принудительно перенаправит все операции чтения и записи для вашего приложения в другую базу данных:

class ProfilesAPIRouter:
    
    APP_LABEL = 'profiles_api'  # I think this is the name of your app
    DB_ALIAS = 'lwkdata'

    def db_for_read(self, model, **hints):
        if model._meta.app_label == self.APP_LABEL:
            return self.DB_ALIAS
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == self.APP_LABEL:
            return self.DB_ALIAS
        return None

allow_relation и allow_migrate также можно переопределить, хотя, поскольку вы использовали inspectdb для создания ваших моделей, я предполагаю, что они не управляются

...