Made with Django.
Django: upload_to dinamico en FileField

Pues resulta que esta vez ando trabajando en un proyectillo que requiere subir archivos creando directorios segun el usuario. La documentacion de Django indica que esto se puede lograr usando un metodo al cual se le pasaran las variables instance y filename. El instance incluye todas las caracteristicas de un objeto que ya ha sido guardado en la base de datos, por lo que se puede usar el id, (errrrr, negativo, como todavia no ha sido guardado en la base de datos, el id no esta disponible ;) ). Lo unico que necesitan es crear su funcion y llamarla en la opcion 'upload_to' del modelo:

 

 

def upload_path(instance, filename):
	directorio = instance.Chica.Nombre.lower() + '_%d' % instance.id
	
	return os.path.join('imagenes', directorio, filename)


def thumb_path(instance, filename):
	directorio = instance.Chica.Nombre.lower() + '_%d' % instance.id
	
	return os.path.join('thumbs', directorio, filename)
	
	
	
class Imagen(models.Model):
	Chica = models.ForeignKey(Chica)
	Foto = models.ImageField(upload_to=upload_path, help_text="Presiona el boton para subir una nueva foto a tu perfil.")
	Thumb = models.ImageField(upload_to=thumb_path, editable=False, null=True)
	Etiqueta = models.CharField(max_length=200, blank=True, help_text="Escribe una etiqueta para esta foto (opcional).")
	Cover = models.BooleanField(help_text="Marca este recuadro si deseas utilizar esta foto como presentacion en la pagina principal.")