我试图在基于类的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',)
提交表单后,这会将用户带回到正确的页面。但是现在这行不通了...
答案 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
属性,但是对此您什么也没做。