success_url in UpdateView, based on passed value

后端 未结 5 1064
我在风中等你
我在风中等你 2020-12-23 20:52

How can I set success_url based on a parameter?
I really want to go back to where I came from, not some static place. In pseudo code:

url(r         


        
相关标签:
5条回答
  • 2020-12-23 21:06

    Define get_absolute_url(self) on your model. Example

    class Poll(models.Model):
        question = models.CharField(max_length=100)
        slug = models.SlugField(max_length=50)
        # etc ...
    
        def get_absolute_url(self):
            return reverse('poll', args=[self.slug])
    

    If your PollUpdateView(UpdateView) loads an instance of that model as object, it will by default look for a get_absolute_url() method to figure out where to redirect to after the POST. Then

    url(r'^polls/(?P<slug>\w+)/, UpdateView.as_view(
        model=Poll, template_name='generic_form_popup.html'),
    

    should do.

    0 讨论(0)
  • 2020-12-23 21:11

    Why don't you add a 'next' parameter to your form (template) and catch it in your view. It's common practice to achieve redirecting this way.

    0 讨论(0)
  • 2020-12-23 21:13

    Create a class MyUpdateView inheritted from UpdateView and override get_success_url method:

    class MyUpdateView(UpdateView):
        def get_success_url(self):
            pass #return the appropriate success url
    

    Also i like to pass such parameters like template_name and model inside of inheritted class view, but not in .as_view() in urls.py

    0 讨论(0)
  • 2020-12-23 21:17

    Had the same issue. Was able to get the paramater from self.kwargs as Dima mentioned:

    def get_success_url(self):
            if 'slug' in self.kwargs:
                slug = self.kwargs['slug']
            else:
                slug = 'demo'
            return reverse('app_upload', kwargs={'pk': self._id, 'slug': slug})
    
    0 讨论(0)
  • 2020-12-23 21:23

    I found a way which is useful and very simple. Check it out.

    class EmployerUpdateView(UpdateView):
            model = Employer
            #other stuff.... to be specified
    
            def get_success_url(self):
               pk = self.kwargs["pk"]
               return reverse("view-employer", kwargs={"pk": pk})
    
        
    
    0 讨论(0)
提交回复
热议问题