8

運用サーバーからデータをダンプして、開発サーバーでテストとして使用しようとしていますが、運用サーバーで作成されたフィクスチャ ファイルを指定して開発サーバーで "./manage.py test" を実行するとエラーが発生します。

google/stackoverflow 検索に基づいて行った試行は次のとおりです。

# python manage.py dumpdata --indent=4 --natural
error when running tests: IntegrityError: (1062, "Duplicate entry 'cms-agencies' for key 'app_label'")

# python manage.py dumpdata --exclude contenttypes --indent=4
error when running tests: IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`test_current`.`django_admin_log`, CONSTRAINT `content_type_id_refs_id_288599e6` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`))')

# python manage.py dumpdata --exclude contenttypes --natural --indent=4
error when running tests: IntegrityError: (1062, "Duplicate entry '14-add_agencies' for key 'content_type_id'")

# python manage.py dumpdata --exclude contenttypes --exclude auth --indent=4
error when running tests: IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`test_current`.`django_admin_log`, CONSTRAINT `user_id_refs_id_c8665aa` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`))')

# python manage.py dumpdata --exclude contenttypes --exclude auth --natural --indent=4
error when running tests: IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`test_current_abril`.`django_admin_log`, CONSTRAINT `user_id_refs_id_c8665aa` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`))')

また、settings.py から "'init_command': 'SET storage_engine=INNODB'" を削除しようとしましたが、それでも 1062 エラーが発生しました。

この問題がわかりません。django は、フィクスチャをロードしたときに、prod サーバー上にあったのとまったく同じように DB を再作成するべきではありませんか?

4

4 に答える 4

14

私は同様の問題を抱えていました、そしてこれらの引数は私のために働きました:

python manage.py dumpdata --natural --exclude auth.permission --exclude contenttypes --indent 4

また、post_saveシグナルがオブジェクトを2回作成する際に多くの問題が発生しました。そのための修正があります:フィクスチャがdjango post_saveシグナルコードと競合するのを防ぐにはどうすればよいですか?

于 2012-10-04T05:19:59.543 に答える
1

問題は、自然キー (Django の新しいバージョンでは自然外部キー) を使用すると、Django は実際には親オブジェクト内に多対多の関係を格納することです。それはあなたが望むものです。ただし、すべてのテーブルを単純にダンプすることはできません。ダンプに多対多のテーブル/モデルを含めてはなりません。同じデータを 2 回ロードすると、ブーム、重複、IntegrityErrors が発生します。

たとえば、auth.Userauth.Groupをダンプする必要がありますが、 auth.User_Groupsはダンプしないでください。Django 1.7 からのダンプの例を見てください:

{
    "model": "auth.group",
    "fields": {
        "permissions": [],
        "name": "ST"
    },
},
{
    "model": "auth.group",
    "fields": {
        "permissions": [],
        "name": "property_manager"
    },
},

{
    "model": "auth.user",
    "fields": {
        "username": "boss",
        "groups": [
            ["property_manager"],["ST"],
        ],
        "user_permissions": [],
    },
},

次の行は、同一の行順序と主キーを含む同一のコピーを取得するために dev に移動できるユーザー/権限とコンテンツ タイプの包括的なダンプを作成します (Django 1.7 でテスト済み):

python manage.py dumpdata auth.User auth.Group contenttypes auth.Permission --indent 4 --natural-foreign > users.json
于 2016-03-31T23:06:14.573 に答える
1

エラーは何が起こっているのかを正確に伝えていると思います。app_labelユニークですか?だと思います。app_label同じキー値を持つ 2 つのオブジェクトがあると思います。( cms-agencies)

さらに、外部キー関係がある場合は、外部キーに対応するオブジェクトが必要です。ダンプ データは、1 つのモデルのみをダンプするため、これを行いません。

https://github.com/davedash/django-fixture-magicのようなもの がこれに最適です。モデルとすべての fk 依存関係をダンプします。

于 2012-04-27T12:49:25.730 に答える
0

あなたの問題は、Unicode ファイルをダンプしたことかもしれませんが、django は読み込み時に ascii ファイル形式を想定しています。これは、Windows で PowerShell を使用する場合に発生します。

于 2012-10-04T05:36:10.660 に答える