Recuperation d'un id supprimer

CBV delete

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Parmi mes deux difficulté du jour, voici ma deuxième (qui je l'espère sera moins évidente).

Je n'arrive pas a retrouver l'id de l'objet que je vient de supprimer grâce a ma CBV delete.

Dans mon get_context_data je peut me servir de kwargs['object'] , mais je ne peut pas le faire depuis mon get_success_url ..

Si quelqu'un a une solution, je suis preneur =)

Édité par Coyote

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Auteur du sujet

Le problème c'est que je ne peut pas stocker ma valeur dans une variable comme a fini par le faire ce monsieur.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class CustomerExperimentDelete(DeleteView):
    model = CustomerExperiment

    def get_success_url(self, **kwargs):
        return reverse_lazy('experiment_list', kwargs = {'companyId' : kwargs['object'].company.id})

    def get_context_data(self, **kwargs):
        context = super(CustomerExperimentDelete, self).get_context_data(**kwargs)
        context['companyId'] = kwargs['object'].company.id
        context['experiment'] = kwargs['object']
        return context

Je dois supprimer cet experiment, mais garder en variable la company a qui il appartenait pour renvoyer sur la bonne liste… Le seul endroit ou je pourrait définir une variable serait dans mon get_context_data mais il me dit qu'elle n'existe pas lorsqu'elle se fait appeler dans get_success_url

Si encore je pouvais la recupérer juste après la définition de mon model, ça pourrait marcher

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0

Cette réponse a aidé l'auteur du sujet

Le problème, c'est que get_context_data() n'est PAS appellé dans la phase de suppression, et que donc forcément, ta variable n'est pas définie. J'ai donc deux solution un peu moche, mais qui doivent fonctionner: soit tu redéfinis la fonction delete(), soit tu redéfinis la fonction get_object(), au choix. À la limite, je pencherai pour la première possibilité:

1
2
3
4
5
6
7
    def delete(self, request, *args, **kwargs):
        """rewrite delete() function to redirect to the good page"""
        self.object = self.get_object()
        company_id = self.object.company.id
        self.object.delete()

        return redirect(reverse('experiment_list', kwargs = {'companyId': company_id}))

… Ce qui est de toute façon ce que ferait delete() en temps normal.

Édité par pierre_24

Doctorant et assistant en chimie à l'Université de NamurEx-dev' pour ZdS (a aidé à réaliser la ZEP-12 !) • Carniste cis (y parait que c'est une injure)

+1 -0
Auteur du sujet

Je suis arriver a faire fonctionner avec ton morceau de code! Un grand merci!!

Je n'avais pas du tout vu que get_context_data() n'était appeler que lors de la phase de vérification et puisque j'arriver à l'utiliser sur le formulaire de vérification j'ai penser que ça rouler de ce côté.

Merci encore!

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0

Le site à garder sous la main quand on veux faire du CBV avec django, c'est http://ccbv.co.uk/ :)

Une CBV fonctionne toujours de la même manière: le point d'entrée, c'est as_view(), qui finit à peut près toujours par appeler dispatch() qui finit toujours par appeller get() ou post() (ou autre). Du coup, c'est un peu jeu de piste, mais avec ce site, tu peux toujours "suivre" les appels aux différentes fonctions et voir dans quel ordre elles sont appelée.

Doctorant et assistant en chimie à l'Université de NamurEx-dev' pour ZdS (a aidé à réaliser la ZEP-12 !) • Carniste cis (y parait que c'est une injure)

+0 -0
Auteur du sujet

Oui c'est un peu ce que j'ai ressenti a force de devoir deviner ou ça passer. Merci pour le site je le marque tout de suite, il me sera fortement utile!

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte