Django 1.9 在基于 class 的视图中获取 kwargs

Django 1.9 get kwargs in class based view

我想知道是否有办法直接在基于 class 的视图中获取 kwargs。我知道这可以在 class 内的函数中完成,但是我在尝试这个时遇到了问题:

views.py

class EmployeesUpdateStudies(UpdateView):
    form_class = form_ES
    model = EmployeePersonal
    template_name = 'employeesControll/employees_studies_update_form.html'
    success_url = reverse('employee-details',  kwargs={'pk': kwargs.get('pk')})

我的url如下

url(r'^employees/detalles/(?P<pk>[0-9]+)/$', login_required(views.EmployeeDetails.as_view()), name='employee-details')

你不能在success_url中使用kwargs,因为当Django在服务器启动时加载class时,它无法访问请求。改写 get_success_url 方法。

def get_success_url(self) 
    return reverse('employee-details', kwargs={'pk': self.kwargs['pk']})

Alasdair 的回答解决了您的问题。但是,您可以为 EmployeePersonal 模型定义一个 get_absolute_url 方法,它将作为您视图的 success_url

You don’t even need to provide a success_url for CreateView or UpdateView - they will use get_absolute_url() on the model object if available.

您将在模型对象主键的 get_absolute_url 方法中使用 self.id


参考:

Model Forms