首页 > django中使用UpdateView视图保存时无法从get_absolute_url获取正确地址.

django中使用UpdateView视图保存时无法从get_absolute_url获取正确地址.

在使用Django的UpdateView时保存后出现错误提示:

NoReverseMatch at /HRSystem/person_update/3/
Reverse for 'personupdate' with arguments '()' and keyword arguments '{'pk': 3}' not found. 0 pattern(s) tried: []

定义的views如下:

class PersonUpdateView(edit.UpdateView):
    model = Person
    template_name_suffix = '_update_form'
    form_class = PersonForm

    def get_context_data(self,**kwargs):
        context = super(PersonUpdateView,self).get_context_data(**kwargs)
        return context

想法是保存以后自动跳转回修改以后的详细页面。

因为看到Django文档中有这么一句:

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.

所以没有定义success_url而是在models.py中定义了get_absolute_url()为:

class Person(models.Model):
    #......
    def get_absolute_url(self):
        return reverse('personupdate',kwargs={'pk':self.pk})    

urls.py内容是这样的:

    ...
    url(r'^person_update/(?P<pk>[0-9]+)/$',
        decorators.login_required(PersonUpdateView.as_view(),login_url='HRSystem:login'),
        name='personupdate'
     ),
    ...

请教各位应该如何解决这个问题。我在get_absolute_url()中把kwargs={'pk':self.pk}修改为args=[self.pk]也没有成功。


搜索引擎找了半天,发现解决方法:
将models.py中的get_absolute_url()内容修改为:

class Person(models.Model):
    #......
    def get_absolute_url(self):
        return reverse('HRSystem:personupdate',kwargs={'pk':self.pk})

也就是说在reverse()中加入了app名称。

【热门文章】
【热门文章】