【问题标题】:CreateView form_invalid for multiple forms?多个表单的 CreateView form_invalid?
【发布时间】:2020-12-22 17:53:34
【问题描述】:

我正在使用一个使用 2 个 ModelForm 实例的 CBV。我想显示单个表单错误。在基于类的视图中使用多个表单时,这似乎有点挑战。

这是一个较小的 sn-p 以显示我正在使用的内容...

class EmployeeCreate(CreateView):


    form_class = EmployeeCreateForm
    form_class_2 = AddressCreateForm


    def post(self, request, *args, **kwargs):
        employee_form = self.form_class(request.POST)
        address_form = self.form_class_2(request.POST)
    
        # Make sure both forms are validated
        if employee_form.is_valid() and address_form.is_valid():
            employee = employee_form.save(commit=False)
            address = address_form.save(commit=False)
            employee.parent = self.request.user
            employee.save()
            address.user = employee
            address.save()
            return JsonResponse({'message': 'Employee created successfully.'}, status=200)
        else:
            return self.form_invalid(**kwargs)

    def get_context_data(self, **kwargs):
        # render both forms to create an Account, and Address
        context = super(EmployeeCreateView, self).get_context_data()
        context['employee_form'] = self.form_class
        context['address_form'] =  self.form_class_2
        return context

    def form_invalid(self, **kwargs):
        return JsonResponse({'success': False})

现在当表单无效时,form_invalid 方法被调用并返回 JsonResponse 消息,但我更愿意返回特定的表单错误。

我正在尝试找到一种方法来显示employee_formaddress_form 的每个单独的表单错误。有没有办法在form_invalid 方法中进行这种覆盖?

提前谢谢你!

【问题讨论】:

    标签: django django-forms django-class-based-views


    【解决方案1】:

    您在单个 JsonResponse 中返回两种表单错误。相反,您应该在单个 JsonResponse 中返回不同的表单错误,例如

    return JsonResponse({'employee_form_errors': self.form_invalid(employee_form),
    'address_form_errors': self.form_invalid(address_form) }, status=400)
    

    您应该单独使用form_invalid 与两种形式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-18
      • 2012-09-16
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 2016-09-19
      相关资源
      最近更新 更多