【问题标题】:update multiple django id's at once一次更新多个 django id
【发布时间】:2018-07-06 14:47:55
【问题描述】:

我有一个 django html 页面,其中有多个记录,总共 3 个列(id,P_350,P_450),我想在单击提交按钮时立即更新。

当我一个一个更新时它工作正常,但我想更新多个记录,所以我在前面添加了一个循环“for id in ids:”来访问多个id;但不知何故,我无法让它工作。

我的问题是:

  • 我是否应该对其他 P_350 和 P_450 也使用 getlist 方法
  • 循环 id 是否正确。如果不是,我该怎么做?

这是我的 view.py 文件:

    ids = request.POST.getlist("id")
    P_350 = request.POST["P_350"]
    P_450 = request.POST["P_450"]
    for id in ids:
        fp_item = fp.objects.get(id=id)
        items=[P_350,P_450]
        for index, w in enumerate(items):
            if index == 0:
                if len(w) > 1:
                    fp_item.P_350 = w
                    fp_item.save()
            elif index == 1:
                if len(w) > 1:
                    fp_item.P_450 = w
                    fp_item.save()

这是我的 html 文件输入部分:

<td style="display:none;">
<input name="id" type="text" value={{ field.id }} >
</td>
<td width="650">
{{ field.FP_Item }}
</td>
{% if field.P_350|length == 0 %}
<td style="display:none;">
{% else %}
<td>
{% endif %}
<input name="P_350" type="text" value={{ field.P_350 }} >
</td>
{% if field.P_450|length == 0 %}
<td style="display:none;">
{% else %}
<td>
{% endif %}
<input name="P_450" type="text" value={{ field.P_450 }} >
</td>

【问题讨论】:

    标签: python django


    【解决方案1】:

    使用__in 一次查询所有项目,而不是遍历 ids

    ids = request.POST.getlist("id")
    qs = fp.objects.filter(id__in=ids)
    

    您可以使用查询集的.update method 一次更新查询集中的所有项目。

    P_350 = request.POST["P_350"]
    P_450 = request.POST["P_450"]
    
    updates = {}
    if len(P_350) > 1:
        updates['P_350'] = P_350
    if len(P_450) > 1:
        updates['P_450'] = P_450
    
    if updates:
        qs.update(**updates)
    

    【讨论】:

    • 非常感谢您的帮助。这种方法更好:) 虽然我有一个问题,它用相同的 P_350 值更新不同的 id。假设我输入了 id 1 -- P_350 = "try_1" id 2 -- P_350 = "try_2" 当我点击提交时,它变成了两个 id 相同的 "try_2" 值。我们如何才能克服这种情况
    • 我应该使用类似这个链接的东西吗:stackoverflow.com/questions/43559164/… 我还需要使用变量名来说明 id 吗?
    猜你喜欢
    • 2017-04-06
    • 2015-10-31
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2011-02-14
    • 2013-06-24
    • 1970-01-01
    • 2016-01-29
    相关资源
    最近更新 更多