2009-09-09 9 views
2

Lorsque j'utilise l'héritage multi-tables, Django crée deux tables - une pour la classe de base et une pour la dérivée, pointant vers la première. Est-il possible de conserver l'entrée de la table de base lors de la suppression de la table dérivée et de créer une autre entrée pour un autre modèle? En d'autres termes, j'ai des modèles: A, B (dérivé de A), C (dérivé de A). Je souhaite convertir un objet de type B en type C. La copie n'est pas une bonne solution car A sert d'ensemble d'éléments, donc les éléments pointent dessus avec une clé ForeignKey.Héritage du modèle Django - Puis-je changer de type de modèle?

Répondre

0

Il n'existe pas de méthode intégrée pour ce faire. Si vous devez conserver l'entrée dans la table de base parce que les clés FK pointent dessus, vous devrez écrire des méthodes de gestionnaire pour manipuler les tables B et C en utilisant le langage SQL brut. Si vous utilisez un SGBDR qui ne prend pas en charge l'intégrité référentielle, vous pouvez simplement copier les données, supprimer l'instance B et créer l'instance C avec le PK défini manuellement sur PK de B.

+0

MySQL a pris en charge l'intégrité référentielle depuis plus de 5 ans maintenant chaque fois que InnoDB est utilisé comme moteur (c'est-à-dire les installations de production les plus modernes) –

+0

Je sais, il fallait juste creuser quand même :-) –

0

S'il n'y a pas de manière intégrée, alors je pense que le faire manuellement n'est pas si mauvais - faites c une copie de b, puis faites b.items.update(itemset=c).

Questions connexes