Django 1.11.5带有args的基于类的(通用)重定​​向函数

时间:2018-01-30 17:54:30

标签: python django redirect

在我在Django 1.11.5中创建的应用程序中,我使用ClassBased或Generic视图创建了更新,创建和删除功能,但是我在将用户重定向到正确的动态页面时遇到了问题。在用户打开特定产品的详细信息页面的情况下,当用户更新产品信息时,我希望应用程序将用户重定向回更新的页面。到目前为止,我已经通过指定一个特定的id来使用args实现了这一点,该id严格地重定向到指定的页面但不是动态的。

任何有关该主题的帮助或协助都将受到严格限制。

views.py

from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse_lazy
from django.core.urlresolvers import reverse

class CommentUpdate(UpdateView):
    model = Comment
    fields = ['comment_body']

    def get_success_url(self):
        return reverse('detail', args=(2,)) #how to make this part dynamic

详细视图示例。

class DetailsView(generic.DetailView):
    model = Product
    template_name = 'details.html'

urls.py (以防万一)

url(r'^(?P<pk>[0-9]+)/$', views.DetailsView.as_view(), name="detail"),
url(r'review/(?P<pk>[0-9]+)/$',views.CommentUpdate.as_view(), name="comment-update"),

1 个答案:

答案 0 :(得分:1)

您可以根据当前Product动态选择正确的Comment ID,您应该可以通过self.objectDetailView中引用该ID。假设product是相应ForeignKey的名称,您可以执行以下操作:

def get_success_url(self):
    return reverse('detail', args=(self.object.product_id,))

来自docs

  

在执行此视图时, self.object 将包含视图正在操作的对象。