2013-08-28 49 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