2013-08-28 74 views
0

我想從表單中獲取數據,表單根據列表被轉載多次。每個項目的一種形式。該表格由複選框和文本框組成。如果複選框被選中,那麼我也需要附帶的文本框數據。Django驗證錯誤u「''值必須是十進制數。」

視圖:

 for item in request.POST.getlist('item_list'): 
      item_id = int(item) 
      item = Item.objects.get(id=item_id) 
      item_name = item.name 
      print item_name 


      list = List(name = item_name, created_on = now, edited_on = now) 

      for price in request.POST.getlist('price'): 
       print price 
       list_item.price = price 
       list_item.save() 
      #item.delete() 

它不是以上但now = timezone.now()所示。

模板:

<form action="" method="post"> 

    {% csrf_token %} 

    {% for item in item_list %} 
     <input type="checkbox" name="item" value="{{item.id}}">{{item.name}} <input type="text" name="price"><br> 
    {% endfor %} 

    <input type="submit" value="Add Items"> 

</form> 

這會返回一個validationerror [u"'' value must be a decimal number."]。我無法弄清楚爲什麼它會說我輸入的數字不是小數。謝謝你的幫助。

更新:

當我把print request.POST.getlist('price')輸出爲[u'2.55', u'4.32', u'23.421', u'3.00', u'', u'']

+0

嘗試用'list_item.price = Decimal(price)'替換'list_item.price = price'。 – alecxe

+0

我試過,但後來我得到一個'全球名稱'十進制'沒有定義' – apardes

+0

不要忘記一個導入語句:'從十進制導入十進制' – alecxe

回答

1

有空price S IN列表中,跳過它們。此外,將字符串轉換爲小數:

from decimal import Decimal 

... 

for price in request.POST.getlist('price'): 
    if not price: 
     continue 
    list_item.price = Decimal(price) 
    list_item.save() 
+0

但是,現在無論哪個值最後輸入的值都是爲所有項目保存的值。在終端中,我的打印命令返回我輸入的所有正確值。 – apardes

+0

而'print list_item.price'也會在終端中返回正確的值。 – apardes

+0

好,現在問題解決了嗎? – alecxe