在我的 url.py 中,我的网址如下:
url(r'^messstellen/monatlicher_verbrauch/(?P<pk>[0-9]+)/update/$',
generic.UpdateView.as_view(
model=MonatlicherVerbrauch,
form_class=MonatlicherVerbrauchForm,
success_url=reverse('messstellen:messstellen_index'),
template_name='messstellen/monatlich_form.html',
),
现在我想让success_url
类似于:
success_url = redirect('messstellen:messtelle_detail', pk=pk)
其中 pk 应该与正则表达式模式中的相同 (?P<pk>[0-9]+)
有没有办法在 url.py View 中做到这一点?
最佳答案
如果您没有定义 success_url
,那么 Django 将使用模型的 get_absolute_url
方法,您可以将其定义为:
class MonatlicherVerbrauch(models.Model):
...
def get_absolute_url(self):
return reverse('messstellen:messtelle_detail', args=[self.pk])
如果您的 get_absolute_url
指向不同的网址,那么我认为不可能在网址中动态设置 success_url
。您必须覆盖该 View ,并定义 get_success_url
。
class MonatlicherVerbrauchUpdateView(UpdateView):
def get_success_url(self):
return reverse('messstellen:messtelle_detail', args=[self.object.pk])
# define these attributes in the view as well, to keep urls simple
model=MonatlicherVerbrauch,
form_class=MonatlicherVerbrauchForm,
template_name='messstellen/monatlich_form.html',
然后在网址中使用 MonatlicherVerbrauchUpdateView
而不是 UpdateView
。
url(r'^messstellen/monatlicher_verbrauch/(?P<pk>[0-9]+)/update/$',
MonatlicherVerbrauchUpdateView.as_view()),
子类化通用 View 的优点是它将 View 的逻辑与 URL 分开。
关于python - Sucess_url 基于来自 urls.py 的 GenericView 中的 pk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34678017/