Résolue

Bug de mon code, besoin d'un avis

# Correction de code # Django

Bonjour,
voici le lien du repo github : https://github.com/TomQuez/DocShop

Quand je supprime le panier coté utilisateur tout se passe bien. Mais quand je supprime le panier coté administrateur, la suppression se fait mais le champ ordered ne passe pas à True, ce qui crée un bug coté utilisateur. après cette suppression coté administrateur, l'utilisateur peut créer un panier mais il sera vide, et impossible d'ajouter des articles. la page du panier s'affiche mais avec un compteur à zero. j'ai beau essayer de supprimer et recréer un panier coté utilisateur, j'ai toujours le meme bug, meme si j'efface les données de navigation, et que je relance le serveur. pour corriger ce bug, il faut aller dans l'interface administrateur et cocher la case ordered pour que le champ ordered passe à True. Après cette manipulation, on peut de nouveau créer un panier coté utilisateur. Donc mon problème est que je ne comprends pas pourquoi le champ ordered ne passe pas pas à True quand je supprime le panier coté administrateur, alors que a priori j'ai bien surchargé la méthode delete()... Une idée ?...

Thibault houdon

Mentor

Salut Thomas !

Je viens de tester de mon côté avec ton code Github et ça fonctionne. En supprimant le Cart depuis l'interface d'administration, le panier est supprimé et les éléments dans Orders sont bien modifiés (j'ai mis un point de debug dans la méthode delete et le programme passe bien dans la boucle). Et tout me semble effectivement bon dans ton code.

Tu avais bien arrêté et relancé ton serveur Django pour être sûr que tous les changements ont été pris en compte et pas seulement ton navigateur ?

Oui effectivement, j'ai relancé le serveur django plusieurs fois, et effacé les données de navigation plusieurs fois... je ne comprends pas...

j'ai toujours le bug mais je viens de trouver une petite subtilité. Quand je supprime le cart depuis la liste des carts (cf capture d'écran) ça bug. En revanche quand je supprime le cart après avoir cliqué dessus, donc en étant dans la vue détaillé, alors pas de bug, le champ ordered passe a True sans probleme.

Est-ce normal ? Est-ce que j'ai mal compris une subtilité de django ?

Thibault houdon

Mentor

Salut Thomas, je regarde ça cet après-midi dans le détail, je me suis posé la question tout à l'heure et je n'ai pas fait le test mais ça me surprend car normalement la suppression est la même... S'il y a une différence entre les deux alors je dois t'avouer que je la découvrirais en même temps que toi 😄 (je ne vois pas ce que ça changerais, car on surcharge la méthode delete, qui est normalement appelée sur le modèle dès qu'une instance est supprimée, peu importe la façon, mais je vais investiguer). Je te tiens au courant !

Je viens de faire une petite recherche et effectivement il y a une différence (que je découvre aussi du coup !).

https://stackoverflow.com/questions/73099603/custom-django-delete-action-not-firing-from-admin-list-view

À prendre en compte aussi donc en surchargeant la méthode dans la classe Admin pour s'assurer que tout soit bien "nettoyé" dans le cas d'une suppression comme ça ! Je vais rajouter une note dans la formation !

Merci beaucoup pour ta disponibilité et tes réponses !

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.