2010-04-30 8 views
13

Je veux créer une liste d'enregistrements avec des cases à cocher sur le côté gauche .... un peu comme la boîte de réception dans Gmail. Ensuite, si un utilisateur sélectionne tout ou partie de ces cases à cocher, les enregistrements sélectionnés peuvent être mis à jour (un seul champ sera mis à jour BTW), éventuellement en cliquant sur un bouton.Mise à jour de plusieurs enregistrements à la fois en utilisant Django

Je suis coincé sur la façon de le faire si ... des idées?

Afficher le 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 %} 

Répondre

26

Use the queryset update() method:

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

Votre affichage HTML manque une valeur name pour les cases à cocher. Si vous n'avez qu'un seul nom dans toutes les cases à cocher, la liste des ID sera transmise dans une seule variable POST, que vous pouvez obtenir directement à partir de request.POST (en supposant que vous soumettiez votre formulaire comme un message, ce que vous devriez être):

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

Mon principal problème est avec les cases à cocher .... désolé j'ai oublié de mentionner ce peu .... comment puis-je passer le long des identifiants sélectionnés? – Stephen

+0

Comment générez-vous les cases à cocher? –

+7

La méthode update() est très utile, assurez-vous juste que vous êtes conscient d'une mise en garde importante! Si vous avez une méthode save() personnalisée sur vos modèles concernés et/ou les gestionnaires de signaux pre_save/post_save, ceux-ci ne seront pas appelés. –