【问题标题】:Django - How can this UpdateView return to a filtered TableView?Django - 此 UpdateView 如何返回过滤后的 TableView?
【发布时间】:2021-08-23 22:12:40
【问题描述】:

我有一个 Django 项目,其中有一个带有过滤器的 TableView。它可以从表中的行重定向到UpdateViews和DeleteViews,并且工作正常,并且UpdateView在成功时正确地重定向到TableView。

我的问题是,我无法将 UpdateView 重定向到 TableView,同时保留调用 UpdateView 时 TableView 具有的过滤器。

UpdateView 有这个 get_context_data 方法,我可以在其中发送过滤后的 URL:

    def get_context_data(self, **kwargs):
        context = super(SaleUpdateView, self).get_context_data(**kwargs)
        ...
        context['referrer'] = self.request.META.get('HTTP_REFERER')
        return context

我在 HTML 模板中创建了一个按钮来重定向到该引荐来源网址,该引荐来源网址应该重定向到过滤后的 TableView,但它会将我重定向到未过滤的 TableView。我认为这与我的form_valid 方法和get_success_url 方法有关:

    def form_valid(self, form):
        ...
        return HttpResponseRedirect(self.get_success_url())


    def get_success_url(self, form):
        ...
        return reverse_lazy('sale_list')

如何在get_success_url 方法的上下文中访问我发送到模板的self.request.META.get('HTTP_REFERER')referer 数据?

【问题讨论】:

    标签: django


    【解决方案1】:

    我想一定有更好的方法来解决这个问题,但我通过执行以下操作解决了这个问题:

    1. 像这样将referer 发送到UpdateView 的模板:

        def get_context_data(self, **kwargs):
            context = super(SaleDeleteView, self).get_context_data(**kwargs)
            context['referrer'] = self.request.META.get('HTTP_REFERER')
            return context
    

    2. 将其添加到模板的 <form> 隐藏输入中,如下所示:

    <input name="referrer" id="id_referrer" type="hidden" value="{{ referrer }}">
    

    3. 在我的 UpdateView 的 get_success_url 方法中检索它

        def get_success_url(self):
            referrer = self.request.POST['referrer']
            if str(referrer) not in ['', 'None']:
                return referrer
            return reverse_lazy('sale_list')
    

    我添加了最后一个验证,以防用户重新加载 UpdateView,在这种情况下 referer 将为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多