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

标签 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 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/

相关文章:

python - 如何在基于类的通用 View 中使用分页?

python - Django:如何在呈现 View 后更新模型?

python - Django 教程第 1 部分 'Poll' 对象没有属性 'was_published_today'

python - 尝试将 matplotlib 与 ABAQUS 结合使用。收到涉及 dateutil 的错误

python - 努巴。如何使用元组轴参数编写 np.sum ?

python - 我需要帮助将 urlpatterns url 转换为等效路径

python - Django 中的 URL token 身份验证

python - Heroku 上的 Django manage.py 自定义命令

django - Django LoginView 的success_url?

python - 使用创建按钮直接打开 "one2many form view"(odoo)