2010-03-30 2 views
5

Voici un modèle simple de django:Comment mettre à jour le nom de fichier d'une instance FileField de Django?

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

Je voudrais sauver tout cas pour que le nom du fichier de video serait un nom de fichier valide du title. Par exemple, dans l'interface d'administration, je charge une nouvelle instance avec le titre "Lorem ipsum" et une vidéo appelée "video.avi". La copie du fichier sur le serveur doit être "Lorem Ipsum.avi" (ou "Lorem_Ipsum.avi").

Merci :)

Répondre

8

S'il se trouve pendant la sauvegarde, selon le docs, vous pouvez passer une fonction à upload_to qui sera appelé à l'instance et le nom du fichier d'origine et doit retourner une chaîne à utilisé comme nom de fichier Peut-être quelque chose comme:

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 vouliez-vous dire de faire que 'upload_to = video_filename' –

+0

@ T.Stone: ahh oui! Merci –

Questions connexes