2010-03-30 7 views
5

Ecco un semplice modello django:Come aggiornare il nome file dell'istanza FileField di Django?

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

vorrei salvare qualsiasi istanza in modo che il nome del file 's il video sarebbe un nome di file valido del title.

Ad esempio, nell'interfaccia di amministrazione, carico una nuova istanza con titolo "Lorem ipsum" e un video chiamato "video.avi". La copia del file sul server dovrebbe essere "Lorem Ipsum.avi" (o "Lorem_Ipsum.avi").

voi :) Grazie

risposta

8

Se succede solo durante il salvataggio, come per la docs, si può passare una funzione per upload_to che andranno chiamato con l'istanza e il nome del file originale e deve restituire una stringa di essere usato come nome file. Forse qualcosa di simile:

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 volevi dire fare quel 'upload_to = video_filename' –

+0

@ T.Stone: ahh sì! Grazie –