You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django出现“'on'值必须为True或False”错误的解决求助

解决Django中"'on' value must be either True or False."错误

错误原因分析

嘿,问题根源很明确——你直接从request.POST里拿复选框的值,可浏览器提交选中的复选框时,传的是字符串'on',而Django模型里的BooleanField字段只认True/False这种布尔类型,把字符串塞进去自然就触发报错了。另外如果用户没勾选复选框,request.POST里甚至不会有checkbox这个键,直接用request.POST['checkbox']还会触发KeyError。

解决方案

1. 利用表单cleaned_data获取正确布尔值

表单通过is_valid()验证后,会自动把表单数据转换成对应的数据类型,直接从form.cleaned_data里取值就能拿到现成的布尔值,还能避免未勾选时的键不存在问题。

修改views.py里的sign_list函数:

def sign_list(request):
    if request.method == 'POST':
        form = sign(request.POST)
        if form.is_valid():
            cleaned_data = form.cleaned_data
            new_contact = Comment(
                email=cleaned_data['email'],
                message=cleaned_data['message'],
                checkbox=cleaned_data.get('checkbox', False)  # 未勾选时默认设为False
            )
            new_contact.save()
            return redirect('index')
    else:
        form = sign()
    context = {'form' : form}
    return render(request, 'submits/sign.html', context)

2.(可选)修复表单复选框属性的小问题

你的forms.py里定义了checkbox_attributes但没实际用上,应该把样式属性直接绑定到复选框的widget上:

class sign(forms.Form):
    email = forms.CharField(max_length=500, widget=forms.TextInput(attrs={
        'type' : 'email',
        'class' : 'form-control',
        'placeholder' : 'Enter your email',
        'aria-describedby' : 'emailHelp'}))
    message = forms.CharField(widget=forms.Textarea(attrs={
        'class' : 'form-control',
        'rows' : '3',
        'placeholder' : 'Write your proposal'}))
    checkbox = forms.BooleanField(
        required=False, 
        initial=True,
        widget=forms.CheckboxInput(attrs={'class': 'form-check'})
    )

备选方案:手动判断复选框状态

如果不想用cleaned_data,也可以手动判断request.POST里是否存在checkbox键——存在就代表用户勾选了(对应True),不存在就是未勾选(对应False):

# 替换视图里的checkbox赋值逻辑
checkbox = 'checkbox' in request.POST
new_contact = Comment(
    email=request.POST['email'],
    message=request.POST['message'],
    checkbox=checkbox
)

按上面的方法修改后,就能正确把复选框状态转换成布尔值存入数据库,这个错误就彻底解决啦!

内容的提问来源于stack exchange,提问作者João Maria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:37:34