Djangoの複数のデータベースで1つのDBを使用してすべての書き込み操作を実行する

私の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つのデータベース、 'デフォルト'と 'スレーブ'を持っています。スレーブは読み取り専用なので、 self.vcartitem_set.filter(product__id = item)を「スレーブ」データベースを使用して実行すると、 i.delete() 。私は i.delete(using = 'default')を書いてこれを回避することができますが、それをすべてのモデルに書かなければなりません。オブジェクトが以前に 'スレーブ' DBを使用して検索されていたとしても、djangoにすべての書き込み操作を実行するように指示する方法はありますか?

1

1 答え

You can perform this using DB routers:
https://docs.djangoproject.com/en/dev/topics/db/multi-db/#automatic-database-routing

あなたは単にルータモデルを作成し、db_for_readとdb_for_write関数を定義し、DATABASE_ROUTERSをsettings.pyに追加する必要があります。それはそのトリックを行います。

0
追加された