Para resolver o problema de uma vez por todas, sempre que tiver um ImageField ou um FileField em seu model, utilize da seguinte maneira:
def retira_acento_upload(objeto, arquivo):
"""
Essa função irá normalizar como um slug, o nome do arquivo que está sendo gravado e, irá gravá-lo
em /media/uploads/APPNAME_CLASSNAME/ANO/nome_do_arquivo_normalizado.extensao
"""
import os, datetime
from django.template.defaultfilters import slugify
caminho = str( '%s/%s/%s' % ( objeto._meta.app_label, objeto.__class__.__name__, datetime.datetime.now().year ) ).lower()
nome, ext = os.path.splitext( arquivo )
url = slugify( nome[:15] )
return os.path.join( 'uploads', caminho, url+ext )
class SuaClasse(models.Model):
...
arquivo = models.FileField(upload_to=retira_acento_upload)
...
Customize o return da def acima da maneira que desejar. No exemplo acima, o arquivo será enviado para uploads/<nome_da_app>/<nome_da_classe>/<ano_atual>/<nome_do_arquivo_nomalizado>.<extensão>hasta!
Nenhum comentário:
Postar um comentário