在使用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()内容修改为:
也就是说在reverse()中加入了app名称。