[gull] [Q] prob. effacement d'object dans django
Claude Paroz
claude at 2xlibre.net
Wed Jan 7 08:30:52 CET 2015
Le mardi 06 janvier 2015 à 22:15 +0100, sneaky56 at gmx.net a écrit :
> > Le dimanche 04 janvier 2015 à 19:03 +0100, sneaky56 at gmx.net a écrit :
>
> salut claude, dom,
>
> > > l'introduction étant faite, j'en viens à mon problème (django 1.7 et
> > > python3 sous linux, of course). (...)
> > >
> > > l'un d'entre vous a-t-il une idée sur le comment du pourquoi? d'autant
> > > plus que je m'assure de ne pas avoir de foreign key de l'élément que
> > > j'efface vers d'autres entrées.
> >
> > Dans des cas comme ça, le mieux est de poser un point d'arrêt (import
> > pdb; pdb.set_trace()) juste avant le delete() qui pose problème.
> > Ensuite, tu suis le code pas à pas pour voir ce que fait Django.
> > Cela t'amènera probablement à Collector.collect et tu verras peut-être
> > pourquoi Django ajoute la ligne qu'il ne devrait pas dans la liste des
> > objets à supprimer.
>
> finalement, j'ai légèrement changer ma méthode removeEntry (le block
> "with", en fait), et cela semble fonctionner correctement maintenant:
>
> with transaction.atomic():
> if self.prev_entry == self.next_entry:
> self.prev_entry.next_entry = self.prev_entry
> self.prev_entry.prev_entry = self.prev_entry
> self.prev_entry.save()
> else:
> self.prev_entry.next_entry = self.next_entry
> self.prev_entry.save()
> self.next_entry.prev_entry = self.prev_entry
> self.next_entry.save()
> self.next_entry = None
> self.prev_entry = None
> self.save()
> # pdb.set_trace()
> self.delete()
>
>
> j'ai une hypothèse que, lorsque il ne me restait que 2 éléments, les
> objets django self.prev_entry.next_entry et self.next_entry.prev_entry
> étaient deux objets distinct, alors qu'au niveau base de données, il
> s'agit du même objet.
Oui, l'hypothèse se tient. En mémoire, il s'agit effectivement de deux
objets distincts (avec les mêmes contenus, bien sûr).
Claude
--
www.2xlibre.net
More information about the gull
mailing list