【问题标题】:Sucess_url based on pk in GenericView from urls.pySucess_url 基于来自 urls.py 的 GenericView 中的 pk
【发布时间】:2016-01-08 13:15:29
【问题描述】:

在我的 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&lt;pk&gt;[0-9]+) 中的相同

有没有办法在 url.py 视图中做到这一点?

【问题讨论】:

    标签: python django django-generic-views


    【解决方案1】:

    如果你没有定义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 分开。

    【讨论】:

    • 我不知道你可以通过模型定义def get_absolute_url(self) 方法。这很不错。我可以看到这可能会引发动态选择 url 的问题,但它适用于我的情况,我创建简单的更新视图并且不想用“无用”视图填充我的 views.py。
    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2017-12-29
    • 2018-12-16
    相关资源
    最近更新 更多