“视图”未返回HttpResponse对象。它返回None。-基于类的视图

时间:2019-08-20 16:55:20

标签: django

我试图在基于类的Django视图(UpdateView)中访问发布的表单值。我几乎可以正常使用了,但出现了错误:

The view maintenance.views.maintenanceEdit didn't return an HttpResponse object. It returned None instead.

我发现许多其他帖子在基于函数的视图中存在相同的问题,return render(request, 'template.html')解决了该问题,但是如何在基于类的视图中进行相同的操作?

我的views.py

class maintenanceEdit(LoginRequiredMixin,UpdateView,):
    model = Maintenance
    form_class = EditMaintenance
    template_name = 'maintenance_edit.html'
    login_url = 'login'

    def form_valid(self, form,):
        instance = form.save(commit=False)
        complete = form.instance.completed
        super(maintenanceEdit, self).form_valid(form)

在我的models.py中,我有:

    def get_absolute_url(self):
        return reverse('equipmentdashboard',)

提交表单后,这会将用户带回到正确的页面。但是现在这行不通了...

1 个答案:

答案 0 :(得分:1)

您忘记了 return 来自super()通话的结果:

from django.urls import reverse_lazy

class maintenanceEdit(LoginRequiredMixin,UpdateView,):
    model = Maintenance
    form_class = EditMaintenance
    template_name = 'maintenance_edit.html'
    login_url = 'login'
    success_url = reverse_lazy('equipmentdashboard')

    def form_valid(self, form,):
        instance = form.save(commit=False)
        complete = form.instance.completed
        return super(maintenanceEdit, self).form_valid(form)

话虽这么说,Django将在POST成功的情况下返回重定向,以实现Post/Redirect/Get pattern [wiki]。因此,您应该指定一个success_url [Django-doc]

像在这里那样进行覆盖是没有用的,因为您检索了.completed属性,但是对此您什么也没做。

相关问题