2010-04-30 80 views
13

Quiero crear una lista de registros con casillas de verificación en el lado izquierdo ... un poco como la bandeja de entrada en Gmail. Entonces, si un usuario selecciona algunas o todas estas casillas de verificación, los registros seleccionados se pueden actualizar (solo un campo se actualizará por cierto), posiblemente haciendo clic en un botón.Actualizando varios registros a la vez usando Django

Estoy atascado en cómo hacer esto ... ¿ideas?

código Pantalla

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

Respuesta

26

Use the queryset update() method:

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

Su pantalla HTML falta un valor name de las casillas de verificación. Si solo tiene un nombre único en todas las casillas de verificación, la lista de ID se pasará a una única variable POST, que puede obtener directamente desde request.POST (suponiendo que está enviando su formulario como una publicación, que debería ser):

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

Mi problema principal es con las casillas de verificación ... lo siento, me olvidé de mencionar ese bit ... ¿cómo paso a lo largo de los identificadores seleccionados? – Stephen

+0

¿Cómo está generando las casillas de verificación? –

+7

El método update() es muy útil, ¡solo asegúrese de conocer una advertencia importante! Si tiene un método de guardar personalizado() en su (s) modelo (s) afectado (s) y/o controladores de señal pre_save/post_save, no se les llamará. –

Cuestiones relacionadas