从动态添加的元素中获取数据并传递给Django request.POST

时间:2017-10-14 16:28:54

标签: javascript jquery python django django-views

我有一个restaurant_form,允许用户输入菜单项。每个菜单项代表一个动态添加的表行。每个表行都有以下输入:菜单项,价格,清真(布尔)和注释。

这是一个示例条目。 data-id和输入元素的名称递增。<​​/ p>

<tbody class="menu-entry ">
    <tr id='menu0' data-id="0" class="hidden">
        <td data-name="name" class="name">
            <input type="text" name='name0'  placeholder='Menu Item' class="form-control"/>
        </td>
        <td data-name="price">
            <input type="text" name='price0' placeholder='0.00' class="form-control"/>
        </td>
        <td data-name="halal">
            <input type="checkbox" name="veg0" value="halal" class="form-control">
        </td>
        <td data-name="notes">
            <textarea name="notes0" placeholder="Contains soy." class="form-control"></textarea>
        </td>
        <td data-name="del">
            <button name="del0" class='btn btn-danger glyphicon glyphicon-remove row-remove'></button>
        </td>
    </tr>
</tbody>

从表中检索数据的最佳方法是什么?我试过这个:       

  $('#restaurant_form').submit(function () {
        $('.menu-entry').each(function()
        {
            $(this).find('td').each(function(){
                $(this).find("input").each(function() {
                    alert(this.value)
                });

                $(this).find("textarea").each(function() {
                    alert(this.value)
                });
            })
        })
  })

alert()显示正确的值,但我想知道是否有更好的方法可以做到这一点?

修改我使用以下内容对其进行了简化:

$('.menu-entry .form-control').each()

此外,在检索值后,如何通过POST请求将其传递给视图?我想将值保存到模型中 RestaurantMenu有列名,价格,清真和笔记。

谢谢。

1 个答案:

答案 0 :(得分:0)

这就是我的所作所为:

对于每个菜单条目,我将值转换为以逗号分隔的字符串,并添加了一个隐藏的输入来保存值。我将类'menu-row'添加到tr。

menu_entries = request.POST.getlist('menu_entries')
        for menu_entry in menu_entries:
            entry = menu_entry.split(",")
            if entry[1]:
                price = round(float(entry[1]), 2)
            else:
                price = 0.00
            if not entry[2]:
                entry[2] = False
            MenuItems.objects.create(name=entry[0], price=price, halal=entry[2], notes=entry[3], restaurant_id=r.id)

在views.py中:

a = [3,2,5,7,4,5,6,3,8,4,5,7,8,9,5,7,8,4,9,7,6]
from itertools import groupby
[list(g) for k, g in groupby(a, lambda x:x<7) if k]

如果有人知道更好的方法,我很想知道。谢谢!