使用Django一次更新多个记录

Ste*_*en 22 django records django-templates

我想在左侧创建一个带复选框的记录列表....有点像Gmail中的收件箱.然后,如果用户选择这些复选框中的一些或全部,则可以通过点击按钮来更新所选择的记录(仅一个字段将被更新BTW).

虽然想法,我仍然坚持如何做到这一点?

显示代码

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 38

使用queryset update()方法:

id_list = list_of_ids_from_checkboxes
MyModel.objects.filter(id__in=id_list).update(myattribute=True)
Run Code Online (Sandbox Code Playgroud)

您的显示HTML缺少name复选框的值.如果您在所有复选框中只有一个名称,那么ID列表将被传递到单个POST变量中,您可以直接从该变量中获取request.POST(假设您将表单作为帖子提交,您应该这样做):

id_list = request.POST.getlist('checkboxname')
Run Code Online (Sandbox Code Playgroud)

  • update()方法非常有用,只需确保您知道一个重要的警告!如果您在受影响的模型和/或pre_save/post_save信号处理程序上有自定义save()方法,则不会调用这些方法. (7认同)