Dentro de mi view.py, tengo dos funciones, una que procesa la entrada desde un formulario y genera una lista filtrada, y otra que se supone que exporta esta lista a CSV.Generar archivo CSV con Django (contenido dinámico)
Aquí es el regreso de mi primera función:
return render_to_response('templateX.html',
{
'queryset': queryset,
'filter_form': filter_form,
'validated': validated,
},
context_instance = RequestContext(request)
)
Aquí es la función de exportación:
def export_to_csv(request):
# get the response object, this can be used as a stream.
response = HttpResponse(mimetype='text/csv')
# force download.
response['Content-Disposition'] = 'attachment;filename=export.csv'
# the csv writer
writer = csv.writer(response)
qs = request.session['queryset']
for cdr in qs:
writer.writerow([cdr['calldate'], cdr['src'], cdr['dst'], ])
return response
No estoy seguro de cómo obtener el queryset de mi primera función, que contiene una lista de los elementos que quiero en mi CSV y la uso en mi función export_to_csv. O sería la mejor manera combinar estas dos funciones y hacer que el usuario haga clic en una casilla de verificación si desea descargar un archivo CSV. Cualquier ayuda sería apreciada.
Lo probé de esta manera, pero cuando hago clic en mi botón "exportar", que va a la url: localhost: 8000/cdr/export_csv, pierde todas las solicitudes GET y como consecuencia no hay procesamiento de queryset, entonces mi El archivo CSV está vacío. Entonces, ¿cómo puede mi botón "exportar" enviar todas las solicitudes como si estuviera haciendo clic en mi botón "buscar"? – chiurox
Su botón Exportar debe 1) orientar el URL de exportación e incluir los parámetros de consulta, o 2) ser parte de un formulario que tenga los parámetros de consulta, como campos ocultos si es necesario. Es difícil para mí hacer una recomendación específica ya que no tengo muy claro cómo se relacionan sus páginas entre sí. –
Sí, decidí hacerlo de la manera que usted describió como su primera opción. Ahora, 'campos ocultos', eso es interesante, lo veré más adelante cuando me encuentre con una situación similar. – chiurox