Python Django(1.8)Ajax表单BooleanField始终返回True

Python Django(1.8)Ajax表单BooleanField始终返回True,python,ajax,django,django-forms,django-views,Python,Ajax,Django,Django Forms,Django Views,我正在写一个带有两个布尔字段的Django表单: distributive = forms.BooleanField(widget=forms.CheckboxInput( attrs={'id':'distributive'}),required=False, initial=False) transitivity = forms.BooleanField(widget=forms.CheckboxInput( attrs={'id':'transitivity'}),requ

我正在写一个带有两个布尔字段的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
无论我是否选中复选框,这两个字段都返回为假布尔值。我很困惑

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

阿拉斯代尔有一些见解: 我手动将id属性添加到表单字段会覆盖Django的默认id设置,因此浏览器不会从字段返回任何数据

不幸的是,我需要通过javaScript文件访问这些表单字段,因为我使用的是Ajax。我是JavaScript和Ajax的新手,所以我不知道如何解决这个问题

以下是我的Ajax post请求代码:

$.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

简单地将transitivity和distributive的id更改为django的默认id_transitivity和id_distributive不会将它们放入字典中。我知道这不是本文的出发点,但如果您能提供任何帮助,我们将不胜感激。

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

$(“#传递性”).val()
将始终为复选框返回
'on'

请尝试以下操作:

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

尝试打印
request.POST
以查看浏览器提交的数据。
required=False
用于空白值。可以检查或取消检查<代码>复选框< /代码>,空白值是多少?您是否尝试过删除
required
param?@Gocht我认为这不是问题所在。如果对
布尔字段
required=True
,则该表单只有在选中复选框时才有效。@Gocht--我试过了,但不幸的是没有效果。@Alasdair我试过你的建议,得到了一些有趣的结果。QueryDict具有“on”作为键“transitivity”和“distributive”的值