Updating several records at once using Django
Asked Answered
D

1

39

I want to create a list of records with checkboxes on the left side....kinda like the inbox in Gmail. Then if a user selects some or all of these checkboxes, then the selected record(s) can be updated (only one field will be updated BTW), possibly by clicking a button.

I'm stuck on how to do this though....ideas?

Display Code

{% 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 %}
Dickinson answered 30/4, 2010 at 10:22 Comment(0)
S
65

Use the queryset update() method:

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

Your display HTML is missing a name value for the checkboxes. If you just have a single name across all checkboxes, then the list of IDs will be passed into a single POST variable, which you can get straight from request.POST (assuming you're submitting your form as a post, which you should be):

id_list = request.POST.getlist('checkboxname')
Slavonic answered 30/4, 2010 at 10:31 Comment(3)
My main problem is with the checkboxes....sorry I forgot to mention that bit....how do I pass along the selected ids?Dickinson
How are you generating the checkboxes?Slavonic
The update() method is very useful, just make sure that you are aware of an important caveat! If you have custom save() method on your affected model(s) and/or pre_save / post_save signal handlers, those will not get called.Arachnoid

© 2022 - 2024 — McMap. All rights reserved.