0

I have a path:

path('update/<int:pk>/<int:projet>', UtilisateurUpdateView.as_view(), name='update', ),

I want to be able to get value of parameters 'projet' in my UtilisateurUpdateView but don't know how

for example, if my url is http://127.0.0.1:8000/project/update/1/8 I would like to be able to recovered 8 corresponding to parameters 'projet'

class UtilisateurUpdateView(UpdateView):
    model = Utilisateur
    fields = ['uti_nom','uti_pre','uti_mai','uti_sit','uti_pro']
    print('projet POST',self.request.POST['projet'])
    def get_context_data(self, **kwargs):
        data = super(UtilisateurUpdateView,self).get_context_data(**kwargs)

        if self.request.POST:
            data["utilisateur"] = self.request.user.username
            # data["projet"] = get_object_or_404(Projet, pro_ide = self.request.POST['projet'])
            data["user_profil"] = self.request.session.get('user_profil')
            data["application"] = ApplicationFormset(self.request.POST, instance=self.object)
        else:
            data["application"] = ApplicationFormset(instance=self.object)
        return data

    def form_valid(self, form):
        context = self.get_context_data()
        application = context["application"]
        user_profil = context["user_profil"]
        # print('projet',context["projet"].pro_nom)
        if user_profil == 'investigateur':
            self.object.uti_val = 0 # demande modifiée par investigateur -> repasse à non validée + envoie de mail
        elif user_profil == 'moniteur':
            self.object.uti_val = 1 # demande validée par moniteur -> validée + envoie de mail
            self.object.uti_val_dat = timezone.now()
        else:
            self.object.uti_val = 0
        self.object = form.save()

        if application.is_valid():
            form.instance = self.object
            application.save()
            # informations nécessaires pour l'envoi d'un mail
            utilisateur_nom = form.data['uti_nom'] # nom de l'utilisateur pour lequel une demande est créée
            utilisateur_prenom = form.data['uti_pre']
            utilisateur = utilisateur_nom+' ,'+utilisateur_prenom
            applications = [app.app_app_nom for app in Application.objects.filter(uti_ide=self.object.uti_ide)]
            # email('modification',context["utilisateur"],'j.lecarrou@hotmail.fr',utilisateur,context["projet"].pro_nom,applications)
        return super().form_valid(form)

    def get_success_url(self):
        return reverse("project:index")
SLATER
  • 613
  • 9
  • 31
  • 1
    Does this answer your question? [Capturing url parameters in request.GET](https://stackoverflow.com/questions/150505/capturing-url-parameters-in-request-get) – Benjamin Rowell May 14 '20 at 13:30
  • 1
    You can use `self.kwargs`, e.g. `self.kwargs['projet']`. – Alasdair May 14 '20 at 13:39
  • @Alasdair: self.kwargs['projet'] or self.kwargs['project']? ; I have already try but "projet" is not recognized – SLATER May 14 '20 at 13:42
  • Oops, `project` was a typo - I translated to English without realising. – Alasdair May 14 '20 at 13:43
  • I try again and it works self.kwargs['projet']... don't what I have done before... thanks – SLATER May 14 '20 at 13:44
  • The `print('projet POST',self.request.POST['projet'])` line in your question won't work, because it runs when Django loads the view, before it is handling the request. If you access `self.request` or `self.kwargs` inside a method, e.g. `get_context_data`, then it should work because it will run when Django handles a request. – Alasdair May 14 '20 at 13:46

1 Answers1

0

You should be able to catch those parameters on your views.py

def someview(request, pk, projet):
    someobj = Someobj.objects.all().filter(pk=pk, project=projet)
    #context ...
    #render....
Paaksing
  • 432
  • 1
  • 4
  • 17