1 J - QuerySets e ORM Do Django HonKit
1 J - QuerySets e ORM Do Django HonKit
O que é um QuerySet?
Um QuerySet (conjunto de busca) é, em essência, uma lista de objetos de um dado
modelo. QuerySet permite que você leia os dados a partir de uma base de dados, filtre e
ordene.
O Shell do Django
Abra o seu terminal (não o PythonAnywhere) e digite o seguinte comando:
command-line
command-line
(InteractiveConsole)
>>>
Agora você está no console interativo do Django. Ele é como o prompt do Python, só que
com umas mágicas adicionais ;). Você pode usar todos os comandos do Python aqui
também, é claro.
Todos os objetos
Primeiro, vamos tentar mostrar todas as nossas postagens. Podemos fazer isso com o
seguinte comando:
command-line
https://tutorial.djangogirls.org/pt/django_orm/ 1/6
10/06/24, 20:23 QuerySets e ORM do Django · HonKit
>>> Post.objects.all()
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'Post' is not defined
Oops! Um erro apareceu. Ele nos diz que não existe algo chamado Post. É verdade -- nós
esquecemos de importá-lo antes!
command-line
Mas isso é simples: basta importar o modelo Post de dentro do blog.models . Vamos
tentar mostrar todas as postagens novamente:
command-line
>>> Post.objects.all()
<QuerySet [<Post: my post title>, <Post: another post title>]>
É uma lista dos posts que criamos mais cedo! Nós criamos estes posts utilizando a
interface do Django admin. No entanto, agora queremos criar novos posts utilizando
Python. Como fazemos isso?
Criando um objeto
É assim que se cria um objeto Post no banco de dados:
command-line
Mas aqui temos um ingrediente faltando: me . Precisamos passar uma instância do modelo
User como autor. Como fazemos isso?
command-line
https://tutorial.djangogirls.org/pt/django_orm/ 2/6
10/06/24, 20:23 QuerySets e ORM do Django · HonKit
command-line
>>> User.objects.all()
<QuerySet [<User: ola>]>
Este é o superusuário que criamos anteriormente! Vamos pegar uma instância do usuário
agora (ajuste esta linha para usar seu próprio nome de usuário):
command-line
>>> me = User.objects.get(username='ola')
Como você pode ver, agora obtém um Usuário com um nome de usuário que é igual a
'ola'. Arrumado!
command-line
command-line
>>> Post.objects.all()
<QuerySet [<Post: my post title>, <Post: another post title>, <Post: Sample title>]>
Filtrando objetos
Um recurso importante dos QuerySets é a possibilidade de filtrá-los. Digamos que
queremos encontrar todos as postagens escritas pela usuária ola. Para isto, usamos
filter ao invés de all em Post.objects.all() . Entre parênteses, indicamos quais
https://tutorial.djangogirls.org/pt/django_orm/ 3/6
10/06/24, 20:23 QuerySets e ORM do Django · HonKit
condições precisam ser atendidas por um post para que ele entre no nosso queryset. No
nosso caso, a condição é: author é igual a me . A maneira de escrever isso no Django é:
author=me . Agora o nosso trecho de código ficará assim:
command-line
>>> Post.objects.filter(author=me)
<QuerySet [<Post: Sample title>, <Post: Post number 2>, <Post: My 3rd post!>, <Post: 4
E se quisermos ver todos os posts que contenham a palavra 'title' no campo title ?
command-line
>>> Post.objects.filter(title__contains='title')
<QuerySet [<Post: Sample title>, <Post: 4th title of post>]>
Você também pode obter uma lista de todos os posts publicados. Fazemos isso filtrando
todos os posts com uma published_date definida no passado:
command-line
Infelizmente, o post que nós criamos pelo console do Python não está publicado ainda.
Podemos mudar isso! Primeiro, busque a instância do post que queremos publicar:
command-line
command-line
>>> post.publish()
https://tutorial.djangogirls.org/pt/django_orm/ 4/6
10/06/24, 20:23 QuerySets e ORM do Django · HonKit
Agora, busque novamente a lista de posts publicados (aperte a seta para cima algumas
vezes e pressione enter ):
command-line
>>> Post.objects.filter(published_date__lte=timezone.now())
<QuerySet [<Post: Sample title>]>
Ordenando objetos
Um QuerySet também nos permite ordenar a lista de objetos. Vamos tentar ordenar as
postagens pelo campo created_date :
command-line
>>> Post.objects.order_by('created_date')
<QuerySet [<Post: Sample title>, <Post: Post number 2>, <Post: My 3rd post!>, <Post: 4
command-line
>>> Post.objects.order_by('-created_date')
<QuerySet [<Post: 4th title of post>, <Post: My 3rd post!>, <Post: Post number 2>, <P
>>> Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
<QuerySet [<Post: Post number 2>, <Post: My 3rd post!>, <Post: 4th title of post>, <Po
Legal! Você já está pronta para a próxima parte! Para fechar o terminal, digite:
command-line
https://tutorial.djangogirls.org/pt/django_orm/ 5/6
10/06/24, 20:23 QuerySets e ORM do Django · HonKit
>>> exit()
$
https://tutorial.djangogirls.org/pt/django_orm/ 6/6