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' : ''
我正在编写一个带有两个布尔字段的 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' : ''