Sucess_url基于来自urls.py的GenericView中的pk

时间:2016-01-08 13:15:29

标签: python django django-generic-views

在我的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视图中执行此操作?

1 个答案:

答案 0 :(得分:3)

如果您没有定义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。您必须覆盖视图,并定义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()),

子类化通用视图的优点是它将视图的逻辑与URL分开。