Python Django:如何在数据库中将复选框的POST.get保存为false(0)?

Python Django:如何在数据库中将复选框的POST.get保存为false(0)?,python,django,django-models,django-views,Python,Django,Django Models,Django Views,我试图在数据库中将复选框的值保存为true或false。我必须用一个模型来做这个。如果选中此框,则保存“1”的值。但是,如果未选中该框,我会收到错误消息: Django Version: 1.9.4 Exception Type: IntegrityError Exception Value: (1048, "Column 'completed' cannot be null") 当前我的设置如下所示: 在models.py中,我有: class myClass(mode

我试图在数据库中将复选框的值保存为true或false。我必须用一个模型来做这个。如果选中此框,则保存“1”的值。但是,如果未选中该框,我会收到错误消息:

Django Version:     1.9.4
Exception Type:     IntegrityError
Exception Value:    (1048, "Column 'completed' cannot be null")
当前我的设置如下所示:

在models.py中,我有:

class myClass(models.Model): 
    completed = models.BooleanField(default=False, blank=True)
def create_myClass(request):
    completed = request.POST.get('completed')
    toSave = models.myClass(completed=completed)
    toSave.save()
在views.py中,我有:

class myClass(models.Model): 
    completed = models.BooleanField(default=False, blank=True)
def create_myClass(request):
    completed = request.POST.get('completed')
    toSave = models.myClass(completed=completed)
    toSave.save()
在HTML中,我有:

<label class="col-md-5" for="completed"> Completed: </label>
<input id="completed" type="checkbox" name="completed">

但两者都不起作用(不确定我的语法是否正确?)


非常感谢您的任何想法或建议

您可以打印
request.POST的值,查看视图中的内容

如果未在checkbox HTML元素中指定
属性,则如果选中该复选框,则在
POST
中传递的默认值为
on

在视图中,您可以检查
completed
的值是否为
on

# this will set completed to True, only if the value of 
# `completed` passed in the POST is on 
completed = request.POST.get('completed', '') == 'on'
如果未选中该复选框,则不会传递任何内容,在这种情况下,您将从上述语句中获得
False


如果可以的话,我建议你使用一个新的方法,这样大部分事情都会自动地为你处理好

使用此代码段


要解决这个问题,您必须知道复选框是如何工作的:如果选中了复选框,则会将一个值传递给
request.POST
——但如果不选中复选框,则根本不会传递任何值。那么如果声明

'completed' in request.POST
如果为true,则复选框已被选中(因为只有“已完成”才被发送并位于POST数组中),否则它不会被选中

我更喜欢这种方式,因为它不处理任何花哨的默认值,而是一个简单明了的条件

completed = 'completed' in request.POST
toSave = models.myClass( completed = completed )
toSave.save()

项目经理特别想要这样的模型,因为他想把它们用于其他事情(不是100%确定所有的理由)。completed=request.POST.get('completed','')='on'似乎有效!非常感谢!模型和形式在这个例子中是两个不同的东西。您已经有了一个模型,现在您需要将其与表单关联,以便它可以在UI中呈现该模型,然后处理您提交的数据。你可以在上面的链接中阅读更多关于这个如何工作的信息。@SuperCow:如果答案对你有帮助,请也跟着做。
completed = 'completed' in request.POST
toSave = models.myClass( completed = completed )
toSave.save()
completed = request.POST.get('completed')
completed = True if completed else False