0

我正在尝试从表单中获取数据,该表单会根据列表多次复制。每个项目一个表格。该表单由一个复选框和一个文本字段组成。如果选中该复选框,那么我还需要随附的文本字段数据。

我在这里问了一个相关的问题:

Django 验证错误 u"'' value must be a decimal number."

这主要是解决了但是现在我有一个新问题。

看法:

        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'):
                                if not price:
                                    continue
                print price
                list_item.price = Decimal(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>

当我提交表单时,它现在会通过两个循环两次,并且所有项目的最终价格都是相同的。我通过在我的代码中插入打印函数并分析显示的内容来确定这一点。我想我知道问题出在哪里,问题是如何纠正它,任何帮助将不胜感激。

4

1 回答 1

0

您的模板多次重复以下行:

<input type="checkbox" name="item" value="{{item.id}}">{{item.name}} <input type="text" name="price">

这将创建一个包含字段itemprice为每一行重复的表单。这不是创建表单的好方法。

name=相反,为属性生成具有唯一值的行。例如,

<input type="checkbox" name="item_{{item.id}}">{{item.name}}
<input type="text" name="price_{{item.id}}">

然后回到您的视图中,使用此循环查找匹配对:

for key, value in request.POST.iteritems():
    if not name.startswith('item_'):
        continue
    name, item_id = key.split('_')
    if name == 'item':
        price = request.POST.get('price_%s' % item_id)
        # fetch the item, set the price
于 2013-08-28T23:06:05.753 回答