Recuperation d'un id supprimer

CBV delete

Le problème exposé dans ce sujet a été résolu.

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 =)

+0 -0

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

+0 -0

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.

+1 -0

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!

+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.

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!

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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