2009-07-02 5 views
1

Je reçois l'erreur suivante lorsque je lance ./manage.py reset app1:Remise à zéro des bases de données d'avoir OneToOneField traverser différentes applications dans Django

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') 

avec un modèle qui a OneToOneField avec un autre modèle dans une autre application (disons App2) . J'utilise MySQL InnoDB. Plus précisément, OneToOneField est déclaré dans le modèle d'app2.

Comment puis-je me débarrasser de cette erreur?

Update: La sortie de commande sqlreset est:

(APP1)

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; 

(App2)

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; 
+0

Avez-vous essayé de regarder la sortie de django-admin.py sqlreset app2? Qu'est-ce que c'était? –

+0

Je l'ai mis à jour. – Achimnol

+0

J'ai dû supprimer la contrainte de clé étrangère manuellement via la console mysql. Y a-t-il un soutien pour ce genre d'emplois à Django ou par des tiers? – Achimnol

Répondre

2

Une étape qui peut faire la remise à zéro manuelle facile est (et évitez l'erreur ERREUR 1217):

SET foreign_key_checks = 0 

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

InnoDB ne vous permet pas de déposer une table qui est référencée par une FOREIGN KEY contrainte, à moins que vous ne définissez FOREIGN_KEY_CHECKS = 0. Lorsque vous déposez une table, les contraintes qui étaient définies dans son instruction create sont également supprimées .

Questions connexes