Atualizado: 18/01/2024

Editando e Excluindo Objetos de Modelos - Django

O Django oferece métodos eficientes para editar e excluir objetos de modelos diretamente no banco de dados. Abaixo estão os detalhes sobre essas operações, usando o modelo Person como exemplo:

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=20)
    age = models.IntegerField()

Atualização de Objetos

save()

O método save() pode ser usado para salvar alterações em um objeto existente:

bob = Person.objects.get(id=2)
bob.name = "Bob"
bob.save()

Por padrão, o Django atualiza completamente o objeto, incluindo os campos não modificados. Para otimizar o desempenho e atualizar apenas campos específicos, o parâmetro update_fields pode ser utilizado:

bob = Person.objects.get(id=1)
bob.name = "Robert"
bob.save(update_fields=["name"])

update()

O método update() ( ou sua versão assíncrona, aupdate() ) é uma alternativa eficiente, especialmente quando não é necessário carregar o objeto na memória. Ele pode ser combinado com filter() para atualizar diretamente no banco:

number = Person.objects.filter(id=1).update(name="Mike")
print(number)  # Exibe o número de registros atualizados

Também é possível atualizar múltiplos campos simultaneamente:

Person.objects.filter(id=1).update(name="Mike", age=33)

Em casos onde os valores dependem de seus valores atuais, o uso da classe F é recomendado. Ela permite realizar operações como somar, subtrair ou modificar valores de forma eficiente, sem carregar os objetos na memória.

from django.db.models import F

Person.objects.filter(id=2).update(age=F("age") + 1)

Nesse exemplo, o campo age é incrementado em 1. O método update() aplica alterações em todos os registros que atendem ao critério. Para atualizar toda a tabela, ele pode ser combinado com all():

Person.objects.all().update(age=F("age") + 1)

O método update_or_create() (ou sua versão assíncrona, aupdate_or_create()) combina atualização e criação. Ele atualiza o objeto que atende ao critério fornecido ou cria um novo caso nenhum objeto corresponda:

values_for_update = {"name": "Bob", "age": 31}
bob, created = Person.objects.update_or_create(id=2, defaults=values_for_update)

bulk_update()

O método bulk_update() (ou sua versão assíncrona, abulk_update()) permite atualizar múltiplos objetos em uma única operação:

from .models import Person

first_person = Person.objects.get(id=1)
first_person.name = "Tomas"

second_person = Person.objects.get(id=2)
second_person.age = 29

number = Person.objects.bulk_update([first_person, second_person], ["name", "age"])
print(number)  # Exibe o número de registros atualizados (2 neste caso)

Nesse exemplo, o campo name do primeiro objeto e o campo age do segundo são atualizados. O método retorna o número de objetos atualizados. No entanto, ele apresenta algumas limitações, como não permitir alterações no campo de chave primária e ignorar duplicatas no conjunto de objetos.

Excluindo Objetos

O método delete() (ou sua versão assíncrona, adelete()) remove um objeto específico do banco de dados:

person = Person.objects.get(id=2)
person.delete()

Se não for necessário carregar o objeto na memória antes da exclusão, a combinação de filter() com delete() pode ser usada:

Person.objects.filter(id=2).delete()

Para excluir todos os objetos de uma tabela:

Person.objects.all().delete()
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com