Ao apagar o registro da aplicação, a imagem dentro da pasta media não é excluída ? Como resolver isso ?
Ao apagar o registro da aplicação, a imagem dentro da pasta media não é excluída ? Como resolver isso ?
Olá, Davi! Tudo bem?
No Django, a exclusão de um objeto do banco de dados não resulta automaticamente na exclusão dos arquivos associados a ele. Isso ocorre porque o Django não pode garantir que o arquivo não esteja sendo usado em outro lugar.
No caso desse curso, nos não estamos salvando o arquivo de imagem no banco de dados, mas sim o caminho que leva até o arquivo de imagem que está em uma determinada pasta no nosso projeto.
Uma possível solução é você sobrescrever o método delete()
do seu modelo para que também exclua o arquivo associado. Aqui está um exemplo de como você pode fazer isso:
class SeuModelo(models.Model):
foto = models.ImageField(upload_to='sua_pasta')
def delete(self, *args, **kwargs):
self.foto.delete(save=False)
super().delete(*args, **kwargs)
Nesse exemplo, self.foto.delete(save=False)
é responsável por excluir o arquivo da imagem. O save=False
é usado para evitar que o objeto seja salvo após a exclusão do arquivo.
Lembre-se que, embora essa abordagem funcione geralmente, ela pode falhar em alguns cenários, como quando o método delete()
é chamado como parte de uma consulta em lote. Além disso, essa abordagem não levará em consideração possíveis referências ao arquivo em outras partes do seu projeto. Portanto, use com cuidado!
Espero ter ajudado e bons estudos!