1
resposta

[Dúvida] Upload de Múltiplos arquivos no Models do Django

Tenho uma classe Arquivos, que tem dois campos: tipo_documento e arquivo

Na classe Jazigo eu quero pegar esses arquivos, então eu criei um campo ManyToManyField(Arquivo)

Até funciona, porém quando vou cadastrar o segundo jazigo no /admin do Django o campo já vem preenchido. Como faço para limpar o campo?

classe Arquivo:

class Arquivo(models.Model):
    TIPO_DOCUMENTO = [
        ("CERTIDÃO DE ÓBITO", "Certidão de Óbito"),
        ("GUIA DE SEPULTAMENTO", "Guia de Sepultamento"),
        ("TERMO DE CONCESSÃO DE JAZIGO PERPÉTUO", "Termo de Concessão de Jazigo Perpétuo"),
        ("RECIBOS DE PAGAMENTOS", "Recibos de Pagamento"),
        ("TRANSPARÊNCIA DE RESTOS MORTAIS", "Transferência de Restos Mortais"),
    ]

    tipo_documento = models.CharField(max_length=100, choices=TIPO_DOCUMENTO, default='')
    arquivo = models.FileField(upload_to="documentos/%Y/%m/%d/", null=True)

    def __str__(self) -> str:
        return str(self.tipo_documento)

classe Jazigo

class Jazigo(models.Model):
     ......
    arquivos = models.ManyToManyField(Arquivo)

    def __str__(self) -> str:
        return self.requerente_jazigo
1 resposta

Olá Thais! Tudo bem com você?

Peço desculpa pela demora em responder o seu tópico.

Para limpar o campo de arquivos no momento de cadastrar um novo jazigo no admin do Django, você pode utilizar o método clear() do campo arquivos. Esse método remove todas as associações entre o objeto Jazigo e os objetos Arquivo.

Você pode adicionar o seguinte código no método save() da classe Jazigo para limpar o campo de arquivos antes de salvar o objeto:

def save(self, *args, **kwargs):
    self.arquivos.clear()
    super().save(*args, **kwargs)

Dessa forma, sempre que um novo jazigo for salvo, o campo de arquivos será limpo antes. Acho importante destacar que essa uma solução genérica, já que eu não tenho acesso a todo o escopo do seu projeto, mas pode servir de base para aplicação no seu contexto.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software