Python Django(1.8)Ajax表单BooleanField始终返回True
我正在写一个带有两个布尔字段的Django表单: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
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”的值