greathector7

csv con queryset dinamico django

Apr 21st, 2019
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.90 KB | None | 0 0
  1. def Expedientes_reportes_csv(request):
  2.     # creacion de un csv a partir de un queryset filtrado dinamicamente
  3.     # desde un formulario.
  4.     if request.method == 'GET':
  5.         fecha1 = request.GET.get('desde')
  6.         fecha2 = request.GET.get('hasta')
  7.         dato = request.GET.get('cuenta')
  8.         tipo = request.GET.get('tipo')
  9.         qs = expediente.objects.all().values('cuenta', 'nsolicitud', 'propietario', 'direccion', 'fecha', 'estatus')
  10.         filtros2 = {}
  11.         if fecha1 or fecha2 or dato:
  12.             if fecha1:
  13.                 if fecha2:
  14.                     filtros2.update({"fecha__range": (fecha1, fecha2)})
  15.                     logging.info('Entrada a if para 2 fechas')
  16.                 else:
  17.                     filtros2.update({"fecha__date": (fecha1)})
  18.                     logging.info('Entrada a if para fecha1')
  19.             elif fecha2:
  20.                 filtros2.update({"fecha__date": (fecha2)})
  21.                 logging.info('Entrada a if para fecha2')
  22.             if dato:
  23.                 filtros2.update({"cuenta": (dato)})
  24.                 logging.info('dato en elif')
  25.                 logging.debug(dato)
  26.         else:
  27.             qs_hoy = qs.filter(fecha__date=date.today())
  28.             logging.info('sin datos a pedir trae por defecto el dia')
  29.  
  30.         qs_filtrado = qs.filter(**filtros2).order_by('cuenta', 'nsolicitud')
  31.  
  32.         logging.info('preparacion del queryset')
  33.         logging.debug(str(filtros2))
  34.  
  35.     # generamos las cabeceras y el tipo de contenido    
  36.     response = HttpResponse(content_type='text/csv')
  37.     response['Content-Disposition'] = 'attachment; filename="expedientes.csv"'
  38.  
  39.     # comenzamos la escritura del documento
  40.     writer = csv.writer(response)
  41.    
  42.     #una linea para los datos de generacion
  43.     writer.writerow([fecha1, fecha2])
  44.  
  45.     # una linea para los Titulos
  46.     writer.writerow(['Cuenta', 'N Solicitud', 'Propietario', 'direccion', 'fecha', 'estatus'])
  47.  
  48.     # se general el contenido extrayendolo del queriset anterior ya filtrado
  49.     for expedi in qs_filtrado:
  50.         writer.writerow([expedi['cuenta'], expedi['nsolicitud'], expedi['propietario'], expedi['direccion'], expedi['fecha'], expedi['estatus']])
  51.  
  52.     return response
Advertisement
Add Comment
Please, Sign In to add comment