2010-08-11 6 views
3

J'ai un modèle:Django: nom de l'en minuscule image d'entrée fichier

class Foo(models.Model): 
    poster = models.ImageField(u"Poster", upload_to='img') 

J'utilise l'administration pour télécharger des affiches et enregistrer Foo objets. Je dois maintenant trouver un moyen de minuscules le nom de fichier avant de sauvegarder. Par exemple POSTER.png ou Poster.png ou poster.PNG devrait être en minuscule à poster.png.

Quelle serait la manière la plus facile d'y parvenir?

Répondre

6

FileField.upload_to peut également être un appelable, par ce commentaire dans la documentation:

Cela peut aussi être un appelable, comme une fonction, qui sera appelée pour obtenir le chemin de téléchargement, y compris le nom du fichier. Cet appelable doit pouvoir accepter deux arguments et renvoyer un chemin de type Unix (avec des barres obliques) à transmettre au système de stockage. Les deux arguments qui seront transmis sont les suivants:

Depuis ImageField hérite de tous ses attributs et méthodes de FileField, je pense que vous pouvez utiliser:

def update_filename(instance, filename): 
    path_you_want_to_upload_to = "img" 
    return os.path.join(path_you_want_to_upload_to, filename.lower()) 

class Foo(models.Model): 
    poster = models.ImageField(u"Poster", upload_to=update_filename) 
+0

fonctionne parfaitement, merci Dominique! – Hellnar

+0

Puis marquez comme réponse correcte :) – giolekva