【问题标题】:How to get multiple values from a template and update multiple rows in a table? Django如何从模板中获取多个值并更新表中的多行?姜戈
【发布时间】:2017-09-19 10:15:44
【问题描述】:

我对 Django 和 Python 还很陌生。我有一个库存管理网站。我正在尝试更新数据库中的多个值。用户应该能够输入更新的库存值,并且它应该更新已提交的每个项目的库存值。 Image of page

我尝试使用“item[{{item.id}}]”创建一个列表,但我不确定如何使用此列表或如何更新多行。我的猜测是我需要从模板中收集所有值和键,并在 POST 中运行一个循环并按 ID 更新相关行。

模板

<form action="" method="post">
  {% csrf_token %}

  {% for item in items %}
    <tr>
      <td>{{item.name}}</td>
      <td>{{item.description}}</td>
      <td>{{item.buyprice}}</td>
      <td>{{item.sellprice}}</td>
      <td><input type="number" value="{{item.instock}}" name="item[{{item.id}}]"></td>
    </tr>
  {% endfor %}
  <tr>
    <td><input type="submit" value="Update"></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  </tbody>
  </table>
</form>

查看

def stockUpd(request):
    if request.method == 'GET':
        items = Item.objects.filter(user=request.user)
        context = {
        'items':items
        }
        return render(request,'stock/stockupd.html',context);
    #if request.method == 'POST':

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    <input type="number" value="{{item.instock}}" name="item_{{item.id}}">
    

    然后

    if request.method == 'POST':
        data = request.POST.dict()
        data.pop('csrfmiddlewaretoken', None)
        for i in data.items():
            obj = Item.objects.get(id=i[0].split("_")[1])
            if not str(obj.instock) == str(i[1]): #here check int or char datatype since 1 not equal "1"
                obj.instock = i[1]
                obj.save()
    

    【讨论】:

    • 收到此错误。不得不削减一些希望没问题的东西。回溯:41. response = get_response(request) 187. response = self.process_exception_by_middleware(e, request) 185. response = Wrapped_callback(request, *callback_args, **callback_kwargs) 文件“C: \Users*\Desktop*\views.py" in stockUpd 23. split=i[0].split("_")[1] 异常类型:IndexError at /stock/upd/ 异常值:列表索引超出范围
    • 检查print request.POST
    • 不确定这是否是您的意思。POST 变量值 csrfmiddlewaretoken 'xkBwwbjDT2DPphZHUpr3m5adlXthqpFNoksByMFgsoqzN7inJedkyVP2cYwExrex' item_2 '23' item_14 '100'
    • 在 for 循环的顶部执行 data.pop('csrfmiddlewaretoken')
    • 现在得到:'generator'对象没有属性'pop'
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2016-01-18
    • 2016-08-13
    • 2015-05-24
    • 2015-07-18
    相关资源
    最近更新 更多