Quiero los nombres de archivo a ser al azar y por lo tanto yo uso upload_to
función que devuelve un nombre de archivo al azar de este modo:Django: ¿Cómo guardar el nombre de archivo original en FileField?
from uuid import uuid4
import os
def get_random_filename(instance, filename):
ext = filename.split('.')[-1]
filename = "%s.%s" % (str(uuid4()), ext)
return os.path.join('some/path/', filename)
# inside the model
class FooModel(models.Model):
file = models.FileField(upload_to=get_random_filename)
Sin embargo, me gustaría guardar el nombre de archivo original a un atributo dentro del modelo. Algo como esto no funciona:
def get_random_filename(instance, filename):
instance.filename = filename
ext = filename.split('.')[-1]
filename = "%s.%s" % (str(uuid4()), ext)
return os.path.join('some/path/', filename)
# inside the model
class FooModel(models.Model):
file = models.FileField(upload_to=get_random_filename)
filename = models.CharField(max_length=128)
¿Cómo puedo hacerlo?
Gracias.
Funciona perfectamente bien en mis pruebas. ¿Cómo exactamente no funciona para usted? ¿Lo que pasa? Tal vez el problema está en el código de vista? – rantanplan
una vez que hace esto y consulta el objeto desde db, ¿todavía ve el valor de nombre de archivo? – miki725
Sí. De hecho, lo probé dentro del caparazón. Lo maté, lo lancé de nuevo y el nombre de archivo estaba allí. En realidad, al principio pensé que simplemente te olvidaste de hacer un 'instance.save()' dentro de get_random_filename. Pero parece que no es necesario. – rantanplan