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
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()
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
bob = Person.objects.get(id=1)
bob.name = "Robert"
bob.save(update_fields=["name"])
update()
O método update()
aupdate()
filter()
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
from django.db.models import F
Person.objects.filter(id=2).update(age=F("age") + 1)
Nesse exemplo, o campo age
update()
all()
Person.objects.all().update(age=F("age") + 1)
O método update_or_create()
aupdate_or_create()
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()
abulk_update()
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
age
Excluindo Objetos
O método delete()
adelete()
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()
delete()
Person.objects.filter(id=2).delete()
Para excluir todos os objetos de uma tabela:
Person.objects.all().delete()