Выполните все операции записи, используя одну БД с несколькими базами данных Django - PullRequest
1 голос
/ 06 февраля 2012

В моем приложении django есть модель с таким методом:

def deleteItem(self, item, pt):
        if pt == 'product':
            i = self.vcartitem_set.filter(product__id=item)
        elif pt == 'brand':
            i = self.vcartbrand_set.filter(brand__id=item)
        else:
            return u'Wrong product type'
        i.delete()
        return 'OK'

У меня есть 2 базы данных, 'default' и 'slave'. Подчиненный только для чтения, поэтому, когда self.vcartitem_set.filter (product__id = item) выполняется с использованием базы данных slave, у меня возникает ошибка на i.delete () . Я могу обойти это, написав i.delete (используя = 'default') , но тогда я должен написать это для каждой модели. Есть ли способ указать django выполнять все операции записи, используя базу данных «по умолчанию», даже если объекты были ранее получены с помощью «ведомой» базы данных?

1 Ответ

0 голосов
/ 11 апреля 2012

Это можно сделать с помощью маршрутизаторов БД:
https://docs.djangoproject.com/en/dev/topics/db/multi-db/#automatic-database-routing

Вам просто нужно создать модель маршрутизатора и определить функции db_for_read и db_for_write, добавить DATABASE_ROUTERS в файл settings.py, и это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...