Editando e Excluindo Objetos de Modelos no 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 atualizadosTambé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()Documentação oficial: