将FormData字段的value附加为布尔值false会导致函数失败

Appending FormData field with value as a boolean false causes the function to fail.

本文关键字:false 失败 函数 布尔值 字段 FormData value      更新时间:2023-09-26

我试图AJAX一个简单的形式到Django服务器,其中一个字段是要更新的对象id,另一个是一个布尔字段,对应的对象应该更新到。在Javascript中,我初始化一个新的FormData并附加表单值,然后通过Ajax调用将其提交给服务器。但是,当布尔形式数据字段设置为false时,Ajax请求失败,说该字段未设置。

的形式
from django import forms
class UpdateHazardForm(forms.Form):
  pk = forms.IntegerField()
  fixed = forms.BooleanField()

相关js代码

var fd = new FormData();
fd.append('pk', pID)
fd.append('fixed', checked)
// Ajax changes to server
$.ajax({
  url: "/update_hazard/",
  type: 'POST',
  data: fd,
  dataType: "json",
  processData: false,
  contentType: false,
  success: function(data) {
    if (data['success']) {
      console.log("success");
    }
    else{
      console.log("not success");
    }
  }
});

view函数

@require_POST
@user_passes_test(lambda u: u.is_superuser)
def updateHazard(request):
  form = UpdateHazardForm(request.POST)
  if form.is_valid():
    pk = form.cleaned_data['pk']
    fixed = form.cleaned_data['fixed']
    hazard = get_object_or_404(Hazard, pk=pk)
    hazard.hazard_fixed=fixed
    hazard.save()
    return JsonResponse({'success': True})
  logger.debug(form.errors)
  return JsonResponse({'success': False})

使用checked==true调用fd.append("fixed", checked)时,表示ajax post成功。当检查==false时,失败,错误为<ul class="errorlist"><li>fixed<ul class="errorlist"><li> This field is required.</li></ul></li></ul>

我怀疑是FormData。Append (name, value)函数使用if语句检查值,当值为布尔值false时,该语句失败。我试过用toString()将"checked"值更改为字符串,但它不起作用。

任何帮助都是感激的。我更喜欢将表单字段保留为布尔域,以保持视图函数的简单性。

如果您希望布尔字段接受false,则需要设置required=False

fixed = forms.BooleanField(required=False)