Django の異なるアプリケーションを横断する OneToOneField を使用してデータベースをリセットする

StackOverflow https://stackoverflow.com/questions/1073162

質問

実行すると次のエラーが発生します ./manage.py reset app1:

Error: Error: app1 couldn't be reset. Possible reasons:
  * The database isn't running or isn't configured correctly.
  * At least one of the database tables doesn't exist.
  * The SQL was invalid.
Hint: Look at the output of 'django-admin.py sqlreset app2'. That's the SQL this command     wasn't able to run.
The full error: (1217, 'Cannot delete or update a parent row: a foreign key constraint fails')

OneToOneField を持つモデルと、別のアプリ (app2 としましょう) の別のモデルを使用します。MySQL InnoDB を使用しています。より正確には、OneToOneField は app2 のモデルで宣言されています。

このエラーを取り除くにはどうすればよいですか?

アップデート:sqlreset コマンドの出力は次のとおりです。

(アプリ1)

BEGIN;
DROP TABLE `app1_instance`;
DROP TABLE `app1_instancegroup`;
CREATE TABLE `app1_instancegroup` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    -- some more fields
)
;
CREATE TABLE `app1_instance` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `belongs_to_id` integer NOT NULL,
    -- some more fields
)
;
ALTER TABLE `app1_instance` ADD CONSTRAINT `belongs_to_id_refs_id_455b868f` FOREIGN KEY (`belongs_to_id`) REFERENCES `app1_instancegroup` (`id`);
CREATE INDEX `app1_instance_belongs_to_id` ON `app1_instance` (`belongs_to_id`);
COMMIT;

(アプリ2)

BEGIN;
DROP TABLE `app2_team`;
CREATE TABLE `app2_team` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `instance_group_id` integer NOT NULL UNIQUE,
    -- some more fields
)
;
ALTER TABLE `app2_team` ADD CONSTRAINT `instance_group_id_refs_id_39493b52` FOREIGN KEY (`instance_group_id`) REFERENCES `app1_instancegroup` (`id`);
COMMIT;
役に立ちましたか?

解決

手動でのリセットを簡単にする 1 つの手順は次のとおりです (そして恐ろしいエラー 1217 を回避できます)。

SET foreign_key_checks = 0

から http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html:

INNODBでは、fortion_key_checks = 0を設定しない限り、外部キーの制約によって参照されるテーブルをドロップすることはできません。ドロップすると、 テーブル、制約は create ステートメントで定義されているのは、 も落とされた。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top