【问题标题】:Using UpdateView's success_url to return to PagedFilteredTableView使用UpdateView的success_url返回PagedFilteredTableView
【发布时间】:2016-09-16 20:53:29
【问题描述】:

我按照this discussion 实现了一个包含过滤内容的表格。在显示的表格中,每一行都有一个单元格,允许用户单击链接并编辑该行的数据。过程中用到了UpdateView。

在从 UpdateView 的表单提交时,我想返回用于启动连接以编辑行数据的过滤内容/表。

在我下面的代码中,'next is {}' 打印所需的 URL,但框架返回错误: The view ...didn't return an HttpResponse object. It returned None instead.

我应该使用哪个函数让 UpdateView 返回到所需的 URL?

class UpdateMyModelView(UpdateView):
    model = MyModel
    template_name='data_form.html'
    fields = ['A', 'B', 'C']

    def form_valid(self, form):
        instance = form.save(commit=False)
        r = self.request
        p = r.POST
        print ('request is: {}'.format(r))
        print ('p is {}'.format(p))
        print ('request POST.next is: {}'.format(p['next']))
        self.success_url = p['next']
        print ('next is {}'.format(self.success_url))
        super(UpdateMyModelView, self).form_valid(form)

【问题讨论】:

    标签: django


    【解决方案1】:

    您的视图没有返回语句,因此它返回None。如果你调用super(),那么你应该返回结果。

    return super(UpdateMyModelView, self).form_valid(form)
    

    在这种情况下,看起来最好覆盖 get_success_url 而不是 form_valid

    def get_success_url(self):
        return self.request.POST.get('next', '/default-url/')
    

    【讨论】:

    • 谢谢!这行得通。 get() 是否正在为 next 进行 dict 查找并使用某种正则表达式将 default-url 替换为“next”查找的值?
    • 使用get() 允许您在缺少密钥时指定回退。如果您执行request.POST['next'],那么如果发布请求中缺少next,您将获得KeyError
    猜你喜欢
    • 2017-06-23
    • 2021-10-28
    • 2020-04-15
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2014-02-01
    相关资源
    最近更新 更多