Queries - Django
from nomeapp.models import *
>>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
>>> b.save()
>>> entry = Entry.objects.get(pk=1)
>>> cheese_blog = Blog.objects.get(name="Cheddar Talk")
>>> entry.blog = cheese_blog
>>> entry.save()
all_entries = Entry.objects.all()
Entry.objects.filter(pub_date__year=2006)
Entry.objects.filter(
... headline__startswith='What'
... ).exclude(
... pub_date__gte=datetime.date.today()
... ).filter(
... pub_date__gte=datetime.date(2005, 1, 30)
... )
Entry.objects.get(headline__contains='Lennon')
Entry.objects.all().delete()
Material de apoio
Tipos de relacionamento
- OneToMany
class Endereco(models.Model):
# Definimos seus atributos
class Cliente(models.Model):
# Definimos seus atributos
endereco = models.OneToOneField(Endereco, on_delete=models.SET_NULL, null=True)
- ForeignKey
class Pedido(models.Model):
cliente = models.ForeignKey("Cliente", on_delete=models.CASCADE, related_name='pedidos')
- ManyToManyField
class Produto(models.Model):
nome = models.CharField(max_length=50, null=False, blank=False)
descricao = models.CharField(max_length=200, null=False, blank=False)
valor = models.FloatField(null=False, blank=False)
def __str__(self):
return self.nome
class Pedido(models.Model):
STATUS_CHOICES = (
("P", "Pedido realizado"),
("F", "Fazendo"),
("E", "Saiu para entrega"),
)
cliente = models.ForeignKey("Cliente", on_delete=models.CASCADE, related_name='pedidos')
observacoes = models.CharField(max_length=300, null=False, blank=False)
data_pedido = models.DateTimeField(default=timezone.now)
valor = models.FloatField(blank=False, null=False)
status = models.CharField(max_length=1, choices=STATUS_CHOICES, blank=False, null=False)
produtos = models.ManyToManyField(Produto)
def __str__(self):
return self.cliente.nome
Lembrar
select_related = realiza uma única query de todos os models relacionados
prefetch_related = busca todo o objeto para evitar o problema com Lazy
value_list = busca os itens específicos
O bulk_create recebe uma lista de cadastros e cria realizando somente uma query.
Material de apoio
(ler para evitar número muito grande de SELECT de forma desnecessária)
Comentários
Postar um comentário