simple form fields example python django file upload pickle

python - form - simple upload file django



¿Cómo cargo datos en escabeche a django FileField? (5)

NOTA: Consulte otras respuestas y comentarios a continuación : información anterior y enlaces rotos eliminados (no se puede eliminar una respuesta aceptada una vez).

Marty Alchin tiene una sección sobre esto en el capítulo 3 de Pro Django, reseña aquí .

Me gustaría almacenar grandes conjuntos de datos generados en Python en un modelo de Django. Mi idea era reunir los datos en una cadena y subirlos a FileField de mi modelo. Mi modelo django es:

#models.py from django.db import models class Data(models.Model): label = models.CharField(max_length=30) file = models.FileField(upload_to="data")

En mi programa de Python, me gustaría hacer lo siguiente:

import random, pickle data_entry = Data(label="somedata") somedata = [random.random() for i in range(10000)] # Next line does NOT work #data_entry.file.save(filename, pickle.dumps(somedata))

¿Cómo debo modificar la última línea para almacenar somedata en el file conservando las rutas definidas con el parámetro upload_to ?


¿No sería mejor que guardes tus datos en un campo de texto? No es una carga de archivos, después de todo.


En base a las respuestas a las preguntas, se me ocurrió la siguiente solución:

from django.core.files.base import ContentFile import pickle content = pickle.dumps(somedata) fid = ContentFile(content) data_entry.file.save(filename, fid) fid.close()

Todo se hace en el lado del servidor y los usuarios NO pueden cargar pepinillos. Lo probé y funciona todo bien, pero estoy abierto a cualquier sugerencia.


En su base de datos, el atributo del archivo es solo una ruta al archivo. Entonces, como no está haciendo una carga real, necesita almacenar el archivo en el disco y luego guardar la ruta en la base de datos.

f = open(filename, ''w'') pickle.dump(somedata, f) f.close() data_entry.file=filename data_entry.save()


Nunca he hecho esto, pero basándome en leer un poco del código relevante, comenzaría buscando crear una instancia de django.core.files.base.ContentFile y asignándola como el valor del campo.