查询集更新,多个变量重复

时间:2018-07-09 11:14:06

标签: django django-queryset

我遇到一个问题,即我的数据库已更新为与两个id相同的值,即使它们按照下面的示例不同: 假设当我单击提交时,我输入的是id 1的输入-P_350 =“ try_1” id 2-P_350 =“ try_2”,则这两个id都具有相同的“ try_2”值。 您为克服这种情况所提出的建议。

  • 我是否需要使用变量输入名称,包括输入名称前面的id?
  • 还是任何更简单的方法?

对于数据库更新,我具有以下view.py:

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

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)

这是我的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>

1 个答案:

答案 0 :(得分:1)

逻辑错误

如果在相同的输入P_350上放置不同的值,这将在到达后端时获得您放置的最后一个值,您应该将第一个值放在P_350中,第二个值放在P_450中。

在您的示例中,您仅操作P_350 2次...因此P_450将永远不会更新,因为他没有新值。

如果您有与P_350相关的多个输入,则应首先获取所有输入,然后发送到后端(如异步的AJAX),或将多个具有不同名称的P_350放置在后端,并在保存每个P_350时将其处理

https://medium.com/@taranjeet/adding-forms-dynamically-to-a-django-formset-375f1090c2b0