3

データベースはMySQLです。

私はdjango.contrib.authを使用しています。

ここにすべての情報があります:

manage.py dumpdata auth > my_auth.json --natural --exclude contenttypes

次に、データベース全体を削除し (データベース my_database を削除)、新しいデータベースを作成しました (データベース new_database を作成) (./manage.py syncdb を使用してすべてのテーブルを作成します)。

それで

manage.py loaddata my_auth.json

エラーが発生しました:

IntegrityError: (1062、「キー 2 のエントリ '3-add_author' が重複しています」)

どうしたの?

どんな助けでも大歓迎です。ありがとうございました!

4

1 に答える 1

4

(更新しました)

あなたは正しいです(以下のコメントを参照してください)。問題は確かにauth.permissionです。

を実行するsyncdbと、インストールされているすべてのモデルのデフォルト値auth.permission自動的に入力されます。以降の実行でsyncdbは、最近追加されたモデルの新しいエントリが追加されます。

後の段階でデータベースをリセットして再実行syncdbすると、値が再入力され、インストールされたモデルが検査される順序に応じて、関連する権限が異なる順序で追加され、以前のデータベースとは異なるIDが付与される場合があります(モデルは段階的にインストールされました)。

この問題を回避するには、データauth.permissionをダンプするときに除外するかauth(コメントですでに指摘しているように)、auth.permissionデータダンプをロードする前にテーブルをリセットすることができます。

また、データをダンプするときは自然キー--natural)を使用して、整数IDを使用して関連データを参照しないようにすることが重要です (別のデータベースにロードされた場合は同じではない可能性があります)。この機能はDjango1.2で導入されました

于 2011-09-12T09:39:49.050 に答える