Ian*_*ice 2 django django-class-based-views
使用 Django 的基于类的视图,如果表单无效,如何在返回响应时将状态代码设置为 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)
Run Code Online (Sandbox Code Playgroud)
我想要这样做的原因是,我可以轻松地使用状态代码来说明是否使用模式窗口中的表单重新加载顶级窗口或使用提交表单的响应更新模式。
您可以覆盖form_invalid()以更改响应的状态代码:
class CRMContactsAdd(CreateView):
def form_invalid(self, form):
response = super().form_invalid(form)
response.status_code = 400
return response
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
918 次 |
| 最近记录: |