LINUX.ORG.RU

Связи для нескольких БД в django

 , ,


0

1

Здравствуй, ЛОР!

Вот, разбираюсь с поддержкой нескольких БД в django'e (https://docs.djangoproject.com/en/dev/topics/db/multi-db/). Прошу многоуважаемое сообщество объяснить новичку один нетривиальный момент.

Есть две БД (settings.py):

DATABASES = {

    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "service_db",
        "USER": "service_db_user",
        "PASSWORD": "SR7RMxKCVNxw8L3x",
    },

    "clients": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "clients_db",
        "USER": "clients_db_user",
        "PASSWORD": "J9qbq8VH3SCD4r74",
    },

}
DATABASE_ROUTERS = ["clients.router.ClientsRouter"]

Есть роутер (routers.py):

class ClientsRouter(object):
    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'clients':
            return 'clients'
        return None

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

    def allow_relation(self, obj1, obj2, **hints):
        db_list = ('default', 'clients')
        if obj1._state.db in db_list and obj2._state.db in db_list:
            return True
        return None

    def allow_syncdb(self, db, model):
        if db == 'clients':
            return model._meta.app_label == 'clients'
        elif model._meta.app_label == 'clients':
            return False
        return None

Есть связи - некоторые поля таблиц базы default связаны FK с некоторыми полями таблиц базы clients. Но когда в админке я создаю объект в базе default, который связан с объектом базы clients - выпадает ошибка - не может сохранить объект в базу clients. Хотя, по идее, данный объект должно все сохраняться в базу default.

Как подправить роутер для того, чтобы объекты базы defaults (нк поля которых связаны с полями clients) сохранялись в базе defaults и наоборот.


Ответ на: комментарий от djnoob

Просто не связывай их с помощью foreign key, так как поддержка целостности между базами не работает.

gruy ★★★★★
()
Ответ на: комментарий от gruy

Тогда остается два варианта: либо делать промежуточную базу, где будут храниться id-шники таблиц, которые надо связать, или засунуть связанные таблицы в одну БД.

А в курсе кто-нибудь, RoR умеет такой хинт?

djnoob
() автор топика
Ответ на: комментарий от djnoob

Ну а что мешает связывать не ForeignKey, а обычным IntegerField?

gruy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.