Olá, tudo bem com você?
Peço desculpas pela demora em lhe responder.
Para termos acesso a um atributo dentro de um modelo criado no contexto de ImageField
, será necessário uma função auxiliar para retornar o endereço completo que desejamos salvar o arquivo.
Por padrão, o atributo upload_to
do campo ImageField
aceitará uma função como parâmetro, desde que a mesma tenha a seguinte sintaxe:
def nome_da_funcao(instance, filename):
pass
Onde, instance é a classe do modelo que estamos passando como referência - neste caso, Receita e filename é o nome do arquivo que foi originalmente dado à imagem.
Dito isso, a função para formatar o endereço, ficará da seguinte forma no arquivo receitas/models.py:
def endereco_imagem(instance, filename):
data = datetime.now().date().strftime('/%d/%m/%Y')
return '{}/fotos/{}/{}'.format(instance.categoria, data, filename)
E dentro do campo ImageField
, passaremos a função para o atributo upload_to
:
foto_receita = models.ImageField(upload_to=endereco_imagem, blank=True)
Com essa modificação, você conseguirá salvar as imagens em pastas separadas por categoria. Caso queira que outro atributo seja usado como nome da pasta, basta trocar na função endereco_imagem
o atributo instance.categoria
, pelo nome de outro atributo.
Caso queira conhecer um pouco mais sobre o atributo upload_to
, recomendo a leitura da documentação do Django, podendo ser acessada pelo link abaixo:
A documentação está em inglês, mas caso tenha dificuldades com o idioma, recomendo que utilize o tradutor do próprio navegador.
Fico à disposição em caso de dúvidas.
Abraços e bons estudos.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!