Olá! Quando eu coloco o codigo:
foto = models.ImageField(upload_to="fotos/%Y/%m/%d", blank=True)
O nome de um dos diretórios fica como "fotos", existe um modo desse diretorio ficar com o nome do objeto que foi criado ? Usando self.nome talves ?
Olá! Quando eu coloco o codigo:
foto = models.ImageField(upload_to="fotos/%Y/%m/%d", blank=True)
O nome de um dos diretórios fica como "fotos", existe um modo desse diretorio ficar com o nome do objeto que foi criado ? Usando self.nome talves ?
Bom dia, Anderson! Tudo bem com você?
No código que você compartilhou, o diretório para o upload das fotos é definido como "fotos/%Y/%m/%d". Isso significa que as fotos serão armazenadas em um diretório chamado "fotos", seguido do ano, mês e dia em que foram enviadas.
Se você deseja que o diretório seja nomeado de acordo com o objeto criado, você pode usar o valor do atributo "nome" do objeto no momento do upload. Por exemplo:
import os
def get_upload_path(instance, filename):
# Obtém o nome do objeto
nome_objeto = instance.nome
# Obtém a extensão do arquivo
extensao = os.path.splitext(filename)[1]
# Define o caminho de upload como "fotos/nome_objeto.extensao"
return f"fotos/{nome_objeto}{extensao}"
class SuaModel(models.Model):
nome = models.CharField(max_length=100)
foto = models.ImageField(upload_to=get_upload_path, blank=True)
Dessa forma, o diretório para o upload das fotos será nomeado conforme o objeto criado. Por exemplo, se o objeto tiver o nome "foto1" e o arquivo for "imagem.jpg", o caminho de upload será "fotos/foto1.jpg".
Espero ter ajudado e bons estudos!
Olá Armano! Não era exatamente isso que eu queria, na verdade eu queria criar dentro o diretório fotos, um outro diretório com o nome do objeto e dentro desse diretório, mais um com o ano e etc, até a imagem com o nome original mesmo. O caminho seria algo do tipo fotos/nome_objeto/ano/mes/dia Não sei se consegui me explicar bem...
Usando o que você falou e um pouco do ChatGpt eu fiz a seguinte alteração:
def get_upload_path(instance, filename):
# Obtém o nome do objeto
nome_objeto = instance.nome
# Obtém a extensão do arquivo
extensao = filename.split('.')[-1]
# Define o caminho de upload como "fotos/nome_objeto.extensao"
return os.path.join("fotos", instance.nome, filename)
class SuaModel(models.Model):
nome = models.CharField(max_length=100)
foto = models.ImageField(upload_to=get_upload_path, blank=True)
Assim eu conseguir fazer o caminho fotos/nome_objeto. Não entendi exatamente por que funcionou e também não conseguir criar os outros diretórios que gostaria, com ano, mês e dia
Olá de novo rs !
Consegui depois de muito teste e chatgpt além de olhar aqui no forum, minha solução foi :
def get_upload_path(instance, filename):
# Obtém o nome do objeto
nome_objeto = instance.nome
# Obtém a extensão do arquivo
extensao = filename.split('.')[-1]
# Obtém a data atual
data_atual = datetime.now()
# Define o caminho de upload como "nome_objeto/ano/mes/dia/nome_do_arquivo.extensao"
caminho = os.path.join(nome_objeto, data_atual.strftime('Ano %Y/ Mês %m/ Dia %d'))
return os.path.join(caminho, f"{filename}.{extensao}")
class SuaModel(models.Model):
nome = models.CharField(max_length=100)
foto = models.ImageField(upload_to=get_upload_path, blank=True)
Confeso que a linha :
# Obtém a extensão do arquivo
extensao = filename.split('.')[-1]
Ainda não entendo o que faz exatamente, mas está funcionando rs