2016-09-27 73 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 
相關問題