如果表单无效,则更改 Django CBV 响应的状态代码
Change status code of Django CBV response if form is not valid
使用 Django 的基于 class 的视图,如果表单无效,我如何在返回响应时将状态代码设置为 400?这在功能视图中很容易,但 CBV 会以 200 状态响应,而不管表单有效性如何。
class CRMContactsAdd(CreateView):
model = models.Contact
fields = ['name','job_title','phone_number','email_address','notes']
template_name = 'crm/add_contact.html'
def get_success_url(self):
return reverse('CRM-list')+"?show_modal_url="+reverse('CRM-contacts',args=())
def get_context_data(self, **kwargs):
cd = super(CRMContactsAdd,self).get_context_data(**kwargs)
cd['company'] = get_object_or_404(models.Company,pk=self.kwargs['pk'])
cd['title'] = "Add contact to %s" % (cd['company'].name)
return cd
def form_valid(self, form):
contact = form.save(commit=False)
contact.company = get_object_or_404(models.Company,pk=self.kwargs['pk'])
return super(CRMContactsAdd,self).form_valid(form)
我想这样做的原因是我可以轻松地使用状态代码来说明是否使用模态 window 中的表单重新加载顶层 window或使用提交表单的响应更新模态。
您可以覆盖 form_invalid()
以更改响应的状态代码:
class CRMContactsAdd(CreateView):
def form_invalid(self, form):
response = super().form_invalid(form)
response.status_code = 400
return response
使用 Django 的基于 class 的视图,如果表单无效,我如何在返回响应时将状态代码设置为 400?这在功能视图中很容易,但 CBV 会以 200 状态响应,而不管表单有效性如何。
class CRMContactsAdd(CreateView):
model = models.Contact
fields = ['name','job_title','phone_number','email_address','notes']
template_name = 'crm/add_contact.html'
def get_success_url(self):
return reverse('CRM-list')+"?show_modal_url="+reverse('CRM-contacts',args=())
def get_context_data(self, **kwargs):
cd = super(CRMContactsAdd,self).get_context_data(**kwargs)
cd['company'] = get_object_or_404(models.Company,pk=self.kwargs['pk'])
cd['title'] = "Add contact to %s" % (cd['company'].name)
return cd
def form_valid(self, form):
contact = form.save(commit=False)
contact.company = get_object_or_404(models.Company,pk=self.kwargs['pk'])
return super(CRMContactsAdd,self).form_valid(form)
我想这样做的原因是我可以轻松地使用状态代码来说明是否使用模态 window 中的表单重新加载顶层 window或使用提交表单的响应更新模态。
您可以覆盖 form_invalid()
以更改响应的状态代码:
class CRMContactsAdd(CreateView):
def form_invalid(self, form):
response = super().form_invalid(form)
response.status_code = 400
return response