UpdateView中的success_url,基于传递的值

Bry*_*yce 32 django django-class-based-views

如何success_url根据参数进行设置?
我真的想回到我来自哪里,而不是一些静态的地方.在伪代码中:

url(r'^entry/(?P<pk>\d+)/edit/(?P<category>\d+)',
    UpdateView.as_view(model=Entry, 
                       template_name='generic_form_popup.html',
                       success_url='/category/%(category)')),
Run Code Online (Sandbox Code Playgroud)

这意味着:编辑条目pk然后返回"类别".这里的条目可以是多个类别的一部分.

Dim*_*din 54

创建一个MyUpdateView继承自的方法UpdateView并覆盖get_success_url方法:

class MyUpdateView(UpdateView):
    def get_success_url(self):
        pass #return the appropriate success url
Run Code Online (Sandbox Code Playgroud)

另外,我想在继承的类视图中传递template_name和model之类的参数,但不能.as_view()在urls.py中传递


Ale*_*raf 26

有同样的问题.Dima提到,能够从self.kwargs获得参数:

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})
Run Code Online (Sandbox Code Playgroud)

  • 可以进一步简化使用.get():slug = self.kwargs.get('slug','demo') (2认同)

cha*_*lap 6

我找到了一种有用且非常简单的方法。一探究竟。

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

    
Run Code Online (Sandbox Code Playgroud)