Django (1.8) Ajax 形式 BooleanField 总是 returns True

Django (1.8) Ajax form BooleanField always returns True

我正在编写一个带有两个布尔字段的 Django 表单:

distributive = forms.BooleanField(widget=forms.CheckboxInput(
    attrs={'id':'distributive'}),required=False, initial=False)
transitivity = forms.BooleanField(widget=forms.CheckboxInput(
    attrs={'id':'transitivity'}),required=False, initial=False)

我正在视图中从此表单收集数据:

class MyFormView(View):
    ...
    def post(self, request):
        form = VerbQueryForm(request.POST)
        if form.is_valid():
            transitivity = form.cleaned_data['transitivity']
            distributive = form.cleaned_data['distributive']
            print(type(transitivity))  #debugging
            print(transitivity)        #debugging
            print(type(distributive))  #debugging
            print(distributive)        #debugging

无论我是否选中这些框,两个字段 return 都是 False bool。我很困惑。

如有任何见解,我们将不胜感激。谢谢!

Alasdair 有一些见解: 我手动将 id 属性添加到表单字段会覆盖 Django 的默认 id 设置,因此浏览器 return 没有来自字段的数据。

不幸的是,我需要通过 javaScript 文件访问这些表单字段,因为我正在使用 Ajax。我在 JavaScript 和 Ajax 都是菜鸟,所以我不确定如何解决这个问题。

这是我的Ajaxpost请求代码:

$.ajax({
        url : "/verbquery/", // the endpoint
        type : "POST", // http method
        data : { english_gloss : $('#english_gloss').val(), person : $('#person').val(), number : $('#number').val(),
                 mode : $('#mode').val(), transitivity : $('#transitivity').val(), distributive : $('#distributive').val(),
                 voice : $('#voice').val()}, // data sent with the post request

简单地将传递性和分配性的 id 更改为 django 的默认 id_transitivity 和 id_distributive 不会将它们放入字典中。我知道这不是 post 的初衷,但如有任何帮助,我们将不胜感激。

我认为这是您 javascript 的问题,而不是 Django 表单的问题。

$('#transitivity').val() 将始终 return 'on' 用于复选框。

请尝试以下操作:

$('#transitivity').is(':checked') ? 'on' : ''