2010-03-30 20 views
5

Aquí un sencillo modelo de Django:¿Cómo actualizar el nombre de archivo de una instancia de FileField de Django?

class SomeModel(models.Model): 
    title = models.CharField(max_length=100) 
    video = models.FileField(upload_to='video') 

me gustaría guardar cualquier instancia para que el nombre del archivo video 's sería un nombre de archivo válido de la title.

Por ejemplo, en la interfaz de administración, cargo una nueva instancia con el título "Lorem ipsum" y un video llamado "video.avi". La copia del archivo en el servidor debe ser "Lorem Ipsum.avi" (o "Lorem_Ipsum.avi").

Gracias :)

Respuesta

8

Si sólo ocurre durante el ahorro, según el docs, puede pasar una función a upload_to que se llamará a la instancia y el nombre del archivo original y tiene que devolver una cadena para ser usado como el nombre del archivo Tal vez algo como:

from django.template.defaultfilters import slugify 
class SomeModel(models.Model): 
    title = models.CharField(max_length=100) 
    def video_filename(instance, filename): 
     fname, dot, extension = filename.rpartition('.') 
     slug = slugify(instance.title) 
     return '%s.%s' % (slug, extension) 
    video = models.FileField(upload_to=video_filename) 
+1

@rz quisiste decir para hacer que 'upload_to = video_filename' –

+0

@ T.Stone: ah sí! Gracias –

Cuestiones relacionadas