使用 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 一次更新多条记录的主要内容,如果未能解决你的问题,请参考以下文章