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

时间:2016-09-27 05:01:18

标签: 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(models.Model): 
    completed = models.BooleanField(default=False, blank=True)

在views.py中我有:

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">


我尝试在BooleanField中设置required = False,因为其他一些帖子建议但是然后收到错误:TypeError: __init__() got an unexpected keyword argument 'required'

我还尝试在views.py中将'completed'设置为False,如:

if request.POST.get('completed', False ):
    commpleted = False

completed = request.POST.get('completed')
if completed == 'null':
    commpleted = False

但是没有工作(不确定我的语法是否正确?)

非常感谢任何想法或建议!

4 个答案:

答案 0 :(得分:6)

您可以打印request.POST的值,以查看您在观看中获得的内容。

如果您未在复选框HTML元素中指定value属性,则如果选中该复选框,则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

我建议您使用Django ModelForm,如果可以的话,大部分内容都会自动为您服务。

答案 1 :(得分:1)

  

使用此代码段

def create_myClass(request):
    completed = request.POST.get('completed')
    if not completed:
        completed = False
    toSave = models.myClass(completed=completed)
    toSave.save()

答案 2 :(得分:1)

要解决这个问题,您必须知道复选框的工作方式:如果选中它们,则会将值传递给request.POST - 但如果未选中复选框,则不会传递任何值 at所有即可。所以如果声明

'completed' in request.POST

是的,复选框已被选中(因为只有'完成'已经发送并且在POST数组中),否则它没有。

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

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

答案 3 :(得分:0)

completed = request.POST.get('completed')
completed = True if completed else False