J'ai ce modèle:Django: objets fusion
class Place(models.Model):
name = models.CharField(max_length=80, db_index=True)
city = models.ForeignKey(City)
address = models.CharField(max_length=255, db_index=True)
# and so on
Depuis que je suis les importer de nombreuses sources, et les utilisateurs de mon site sont en mesure d'ajouter de nouveaux endroits, je besoin d'un moyen de les fusionner à partir d'un interface d'administration. Le problème est, le nom n'est pas très fiable car ils peuvent être orthographié de plusieurs façons différentes, etc Je suis habitué à utiliser quelque chose comme ceci:
class Place(models.Model):
name = models.CharField(max_length=80, db_index=True) # canonical
city = models.ForeignKey(City)
address = models.CharField(max_length=255, db_index=True)
# and so on
class PlaceName(models.Model):
name = models.CharField(max_length=80, db_index=True)
place = models.ForeignKey(Place)
requête comme ceci
Place.objects.get(placename__name='St Paul\'s Cathedral', city=london)
et de fusion comme comme vous pouvez le voir, je dois mettre à jour tous les autres modèles avec FK à placer avec de nouvelles valeurs. Mais ce n'est pas une très bonne solution puisque je dois ajouter chaque nouveau modèle à cette liste. Comment puis-je "mettre à jour en cascade" toutes les clés étrangères de certains objets avant de les supprimer?
Ou peut-être il y a d'autres solutions pour faire/éviter la fusion
FWIW je trouve cet exemple plus complet: http://djangosnippets.org/snippets/2283/ – dpn
Snippet ne semble pas fonctionner pour moi plus, échoue sur ForeignKey. La transaction Plus est dépréciée en faveur de l'atomique. De plus iteritems() est devenu items() dans python3. (Les deux derniers numéros étaient faciles à résoudre, le premier pas). – gabn88
En résolvant le premier problème, j'ai découvert que le problème est probablement lié à la propriété groupobject du django guardian. Impossible de le résoudre si :( – gabn88