1

how to update a file field using the object model?

my current code:

impressao = Impressao.objects.get(id=id)

My current condition: (it is getting inside the if condition, but it doesn't save the data)

if request.FILES.get("uri_arquivo"): #uri file
     impressao.arquivo = request.FILES.get("uri_arquivo")

impressao.save()

model

class Impressao(models.Model):

    comentario = models.CharField('comentario', max_length=255, blank=True, null=True)
    arquivo = models.FileField(name='uri_arquivo', max_length=400)
    qtd_copias = models.SmallIntegerField("qtd_copias")
    visualizado_em = models.DateTimeField("visualizado_em", blank=True, null=True)
    prazo_entrega = models.DateTimeField("prazo_entrega", blank=True, null=True)
    colorida = models.BooleanField("colorida", default=False)
    cliente = models.ForeignKey(Usuario, name="cliente", on_delete=models.CASCADE, null=True)
    imprimida = models.BooleanField("is_imprimida", blank=True, default=False)
    tipo = models.ForeignKey(TipoImpressao, on_delete=models.SET_NULL, null=True, name="tipo")

1 Answers1

0

I found the solution:

To update the value, we have to use the database name uri_arquivo

from django.core.files.storage import default_storage
from django.core.files.base import ContentFile


file = request.FILES.get("uri_arquivo")
     default_storage.delete(str(impressao.uri_arquivo)) #delete old file
     path = default_storage.save(file.name, ContentFile(file.read())) #save file in default dir
     impressao.uri_arquivo = path #set file