2017-10-14 13 views
0

我有一个restaurant_form允许用户输入菜单项。每个菜单项代表一个动态添加的表格行。每个表格行都有以下输入:菜单项目,价格,清真(布尔)和笔记。从动态添加的元素获取数据并传递给Django请求。POST

这是一个样本条目。输入元素的数据ID和名称会增加。

<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) 
       }); 
      }) 
     }) 
    }) 

警报()是正确的值,但是我想知道是否有更好的方法来做到这一点?

编辑我简化它使用:

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

另外,检索的值后,我怎样才能把它传递给与POST请求的视图?我想将这些值保存到 RestaurantMenu,其中包含列名,价格,清真和笔记。

谢谢。

+0

尝试使用$(“menu-entry .form-control”)。each() –

+0

@SergAnuke感谢您的提示! $('。menu-entry .form-control')。each()工作:) – tvs

回答

0

这里就是我所做的:

对于每一个菜单项,我转换的值由逗号分隔的字符串,并增加了一个隐藏的输入来保存价值。我添加了class'menu-row'给tr。

$('#restaurant_form').submit(function() { 

     $('.menu-row').each(function(){ 
      var menu_entry = "" 

      $(this).find('.form-control').each(function(){ 
       menu_entry = menu_entry + this.value + "," 
      }) 

      $('#restaurant_form').append('<input type="hidden" name="menu_entries" value="'+ menu_entry +'" />') 
      alert(menu_entry) 

     }) 
    }) 

在views.py:

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) 

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

相关问题