Ver Mensaje Individual
  #9 (permalink)  
Antiguo 04/11/2012, 18:52
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: ¿Cómo tratar varios artículos a la vez en Django?

Código Python:
Ver original
  1. @login_required(login_url='/iniciar-sesion/')
  2. def carrito_de_compra(request, deleted_item=None):
  3.     """deleted_item es la clave primaria (pk) del articulo a borrar,
  4.       si deleted_item es None entonces regresa el formset de lo
  5.       contrario el borrado es ejecutado."""
  6.     lista_recambios = CarritoDeCompra.objects.filter(user=request.user)
  7.  
  8.     precio_total = 0
  9.     unidades_totales = 0
  10.     for recambio in lista_recambios:
  11.         precio_total = recambio.precio * recambio.unidades + precio_total
  12.         unidades_totales = recambio.unidades + unidades_totales
  13.  
  14.  
  15.     UnidadesFormSet = formset_factory(CarritoDeCompra, extra=0)
  16.     if request.method == 'POST':
  17.         formset = UnidadesFormSet(request.POST, request.FILES)
  18.         if formset.is_valid():
  19.             # actualizar las unidades
  20.             formset.save()
  21.             return HttpResponseRedirect('/carrito-de-compra/')
  22.     else:
  23.         if deleted_item:
  24.             item_to_erase = lista_recambios.get(pk=deleted_item)
  25.             item_to_erase.delete()
  26.             item_to_erase = None
  27.             return HttpResponseRedirect('/carrito-de-compra/')
  28.         else:
  29.             formset = UnidadesFormSet()
  30.  
  31.  
  32.     return render_to_response('carrito_de_compra.html', {
  33.         'lista_recambios': lista_recambios,
  34.         'precio_total': precio_total,
  35.         'unidades_totales': unidades_totales,
  36.         'formset': formset
  37.     }, context_instance=RequestContext(request))
No tengo todo el proyecto como para hacer pruebas, pero al menos esto te servirá.