使用Django同时更新多条记录

36

我希望创建一个列表,在左侧放置复选框……有点像Gmail中的收件箱。然后,如果用户选择其中一些或全部复选框,则可以更新所选的记录(仅会更新一个字段),可能通过点击按钮进行更新。

但是,我不知道如何实现这个功能……有什么想法吗?

显示代码

{% for issue in issues %}
   <tr class="{% cycle 'row1' 'row2' %}">
      <td><input name="" type="checkbox" value="{{ issue.id }}" /></td>
      <td>{{ issue.description }}</td>
      <td>{{ issue.type }}</td>
      <td>{{ issue.status }}</td>
      <td>{{ issue.date_time_added|date:"d, M Y" }}</td>
      <td>{{ issue.added_by }}</td>
      <td>{{ issue.assigned_to }}</td>
   </tr>
{% endfor %}
1个回答

62

使用queryset的update()方法

id_list = list_of_ids_from_checkboxes
MyModel.objects.filter(id__in=id_list).update(myattribute=True)

您的显示HTML中复选框缺少name值。如果所有复选框都只有一个名称,则ID列表将被传递到单个POST变量中,您可以直接从request.POST中获取(假设您正在提交表单作为POST)。

id_list = request.POST.getlist('checkboxname')

我的主要问题在于复选框...抱歉我忘了提到这一点...我该如何传递所选的ID? - Stephen
你是如何生成复选框的? - Daniel Roseman
8
update()方法非常有用,只是请确保您知道一个重要的注意事项!如果在受影响的模型上有自定义的save()方法和/或pre_save/post_save信号处理程序,那么这些方法将不会被调用。 - Botond Béres

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接