2010-04-30 48 views
13

我想创建一个左边有复选框的记录列表....有点像Gmail中的收件箱。然后,如果用户选择部分或全部这些复选框,则可以更新选定的记录(仅一个字段将被更新),可能通过点击按钮。使用Django一次更新多个记录

我被困在如何做到这一点,虽然....想法?

显示代码

{% 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 %} 

回答

26

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') 
+0

我的主要问题是与复选框....抱歉,我忘了提及那一点....我如何传递选定的ID? – Stephen 2010-04-30 10:39:54

+0

你如何生成复选框? – 2010-04-30 11:52:29

+7

update()方法非常有用,只要确保您知道一个重要的警告即可!如果您在受影响的模型和/或pre_save/post_save信号处理程序上使用了自定义save()方法,则不会调用这些方法。 – 2010-04-30 12:20:13