使用 Django 一次更新多条记录

Posted

技术标签:

【中文标题】使用 Django 一次更新多条记录【英文标题】:Updating several records at once using Django 【发布时间】:2011-02-14 04:29:58 【问题描述】:

我想在左侧创建一个带有复选框的记录列表....有点像 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】:

Use the queryset update() method:

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

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

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

【讨论】:

我的主要问题是复选框......对不起,我忘了提到那一点......如何传递选定的 ID? 你是如何生成复选框的? update() 方法非常有用,只要确保您知道一个重要的警告!如果您在受影响的模型和/或 pre_save / post_save 信号处理程序上有自定义 save() 方法,这些将不会被调用。

以上是关于使用 Django 一次更新多条记录的主要内容,如果未能解决你的问题,请参考以下文章

更新多条记录的 Django 表单

在一次提交中更新多条记录? - 导轨 3

使用JDBC一次插入多条记录(以MySQL为例)

将多条记录添加到django admin中

使用 sequelize 和 nodejs 更新多条记录?

ios:使用核心数据同时保存/更新多条记录