[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