【问题标题】:Updating several records at once using Django使用 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 %}

【问题讨论】:

    标签: django django-templates records


    【解决方案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() 方法,这些将不会被调用。
    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    相关资源
    最近更新 更多