1

私はdjangoの複数のDBルーターの概念を使用しており、異なるデータベースを持つ複数のサイトがあります。ベースデータベースユーザーは、他のすべてのサブサイトでログインします。

ベースサイトでsyncdbを試してみると(いつでも)正常に機能しましたが、他のサイトでsyncdbを試してみると、初めてしか機能しません。次回以降に試してみると、次のような統合エラーがスローされます。

  • django.db.utils.IntegrityError:(1062、"キー'content_type_id'のエントリ'22-add_somesame'が重複しています")

そのプロジェクトで複数のDBルーター設定を削除すると、syncdbが(いつでも)正しく機能することを意味します。

それで、これは複数のデータベースルーターに関連していますか?または他に何?

誰かがこれについてアドバイスしてください、ありがとう。

4

1 に答える 1

1

ここでの問題は、dbルーターとdjangoシステムオブジェクトにあります。複数のDBとルーターで同じ問題が発生しました。私が覚えているように、ここでの問題は、データベース間で混在するauth.permissionコンテンツタイプにあります。それ以外の場合、syncdbスクリプトはすべてのデータベースでこれらを作成しようとし、そのIDはすでにローカルモデル用に予約されているオブジェクトのアクセス許可コンテンツタイプを作成します。

私は以下を持っています

BASE_DB_TYPES = (
 'auth.user',
 'auth.group',
 'auth.permission',
 'sessions.session',

)。

次に、dbルーターで:

def db_for_read(self, model, **hints):
    if hasattr(model, '_meta') and str(model._meta) in BASE_DB_TYPES:
        return 'base_db' # the alias of base db that will store users
    return None # the default database, or some custom mapping

編集

また、例外はadd_somesame、モデルのパーミッション''を宣言していると言う場合がありますが、somesameDjangoはすべてのオブジェクトのパーミッションを自動的に作成します。add_delete_edit_

于 2012-06-26T13:15:28.443 に答える