2016-09-27 71 views
0

我试图在数据库中将复选框的值保存为true或false。我必须为此使用一个模型。如果该框被选中,则保存'1'的值。但是,如果未选中该复选框我得到的错误信息:Django:如何在数据库中将复选框的POST.get保存为false(0)?

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虚假一些其他职位建议,但随后出现错误:TypeError: __init__() got an unexpected keyword argument 'required'

我也试图设置 '已完成',以假像views.py:(?不知道我的语法是正确的)

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

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

但无论工作

任何意见或建议,非常感谢!

回答

2

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

如果您还没有指定的复选框HTML元素的value属性,这将在POST传递的默认值是on如果复选框被选中。

在视图,你可以检查的completedon

# 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如果你能因此大部分的东西都自动为您悉心照料。

+0

项目经理特别想要的车型,如这一点,因为他希望将其用于其他东西(不是100%肯定所有的推理诚实)。 – SuperCow

+1

completed = request.POST.get('completed','')=='on'似乎工作!非常非常感谢你! – SuperCow

+0

那么,在这种情况下,模型和形式是两个不同的东西。您现在已经有了一个模型,您需要将它与表单关联起来,以便在UI中呈现它,然后处理您提交的数据。你可以阅读更多关于如何在上面的链接工作。 – AKS

1

Use this code snippet

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

要解决,你必须知道如何复选框工作的那个问题:如果他们被选中,值传递给request.POST - 但如果没有被选中复选框,没有值将被传递在所有。因此,如果声明

'completed' in request.POST 

为真,则复选框已被选中(因为只有这样,“完成”已发送,是POST阵列中),否则就没有。

我更喜欢这种方式,因为它不处理w /任何奇特的默认值,但是一个简单而简单的条件。

completed = 'completed' in request.POST 
toSave = models.myClass(completed = completed) 
toSave.save() 
0
completed = request.POST.get('completed') 
completed = True if completed else False 
相关问题