A Camada Model Do Django (Python)
A Camada Model Do Django (Python)
Curso de Python
(https://go.hotmart.com/A55372730Q)
Continuando a nossa série de posts sobre Django, nesse artigo vamos tratar sobre a
camada Model da sua arquitetura!
Se você ainda não leu o post introdutório, você pode estar perdendo algumas
informações iniciais importantes.
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 1/20
04/07/2021 A Camada Model do Django (Python)
Vá Direto ao Assunto…
Onde estamos…
Model Layer (Camada de Modelos)
API de Acesso a Dados
Onde estamos…
Primeiramente, vamos nos situar…
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 2/20
04/07/2021 A Camada Model do Django (Python)
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 3/20
04/07/2021 A Camada Model do Django (Python)
Está aprendendo Django mas ainda não sabe criar páginas web INCRÍVEIS
com HTML5, CSS3 e Bootstrap 4? Aprenda AGORA com esse curso COMPLETO!
Ele contém os campos e comportamentos desses dados. No fim, cada modelo vai
equivaler à uma tabela no banco de dados.
sua vida quando for gerenciar (adicionar, excluir e atualizar) seus dados.
web-com-
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 4/20
04/07/2021 A Camada Model do Django (Python)
Pensando calmamente em sua estação de trabalho enquanto seu chefe lhe cobra
diversas metas, você pensa nos seguintes atributos para tal classe:
Nome
Sobrenome
CPF
Tempo de serviço
Remuneração
Falando nisso…
Quem está inscrito ficou sabendo em primeira mão do lançamento desse artigo!
Então já aproveita a chance e se inscreve aí!!!
Então cadastre o seu email para receber gratuitamente mais conteúdos como
este!
Continuando…
web-com-
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 5/20
04/07/2021 A Camada Model do Django (Python)
Vamos criar, então, esse arquivo na pasta helloworld/models.py (Você ainda tem o
nosso projeto helloworld do _post_ anterior? Se não, então clique aqui e baixe o
arquivo zipado helloworld.zip (/assets/posts/django-model/helloworld.zip) para
seguirmos do mesmo ponto!).
No arquivo models.py você então passa seu rascunho inicial para a classe Python
Funcionário seguindo as duas características que apresentamos (herdar de Model
1
from django.db import models
3
class Funcionario(models.Model):
5
nome = models.CharField(
6
max_length=255,
7
null=False,
8
blank=False
9
)
10
11
sobrenome = models.CharField(
12
max_length=255,
13
null=False,
14
blank=False
15
)
16
17
cpf = models.CharField(
18
max_length=14,
19
null=False,
20
blank=False
21
)
22
23
tempo_de_servico = models.IntegerField(
24
default=0,
25
null=False,
26
blank=False
27
)
28
29
remuneracao = models.DecimalField(
30
max_digits=8,
31
decimal_places=2,
32
null=False,
33
blank=False
34
)
35
36
objetos = models.Manager()
Cada campo tem
um tipo
web-com-
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 6/20
04/07/2021 A Camada Model do Django (Python)
Agora que criamos nosso modelo, é necessário executar a criação das tabelas no
banco de dados (você não achou que seria automático, né?!).
Para isso, o Django possui dois comandos que ajudam muito: o makemigrations e o
migrate .
O comando makemigrations
O comando makemigrations analisa se foram feitas mudanças nos modelos e, em
caso positivo, cria novas migrações ( Migrations ) para alterar a estrutura do seu
banco de dados, refletindo as alterações feitas.
Vamos entender o que eu acabei de dizer: toda vez que você faz uma alteração em
seu modelo, é necessário que ela seja aplicada a estrutura presente no banco de
dados.
Gostou do conteúdo? Compartilha aí!
A esse processo é dado o nome de Migração!
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 7/20
04/07/2021 A Camada Model do Django (Python)
Portanto, toda vez que você alterar o seu modelo, não se esqueça: execute python
manage.py makemigrations !
helloworld\migrations\0001_initial.py
Resultado
Agora, podemos ver que foi criada uma pasta chamada migrations dentro de
helloworld .
Dentro dela, você pode ver um arquivo chamado 0001_initial.py : ele contém a
Migration que cria o model Funcionario no banco de dados (preste atenção na
O comando migrate
Quando executamos o makemigrations , o Django cria o banco de dados e as
migrations, mas não as executa, isto é: não aplica as alterações no banco de dados.
settings.py
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 8/20
04/07/2021 A Camada Model do Django (Python)
1
DATABASES = {
2
'default': {
3
'ENGINE': 'django.db.backends.sqlite3',
4
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
5
}
6
}
Por padrão, o Django utiliza um banco de dados leve e completo chamado SQLite
(https://sqlite.org/index.html). Já já vamos falar mais sobre ele.
Para isso, vamos para a raíz do projeto e executamos: python manage.py migrate . A
saída deve ser:
Operations to perform:
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying helloworld.0001_initial... OK
Applying sessions.0001_initial... OK
Compartilha aí!
Gostou do conteúdo?
Resultado
web-com-
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 9/20
04/07/2021 A Camada Model do Django (Python)
Calma lá… Havíamos definido apenas uma Migration e foram aplicadas 15!!! Por
quê???
Pois então, cada app desses contém seus próprios modelos e migrations. Sacou?!
Com a execução do migrate , o Django irá criar diversas tabelas no banco. Uma
delas é a nossa, similar à:
1
CREATE TABLE helloworld_funcionario (
2
"id" serial NOT NULL PRIMARY KEY,
3
"nome" varchar(255) NOT NULL,
4
"sobrenome" varchar(255) NOT NULL,
5
...
6
);
Isso está muito abstrato! Como eu posso ver o banco, as tabelas e os dados na prática?
Com ela, podemos ver a estrutura do banco de dados, alterar dados em tempo real,
fazer queries, e muito mais!
web-com-
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 10/20
04/07/2021 A Camada Model do Django (Python)
Temos:
Nele, podemos clicar em “Abrir banco de dados” e procurar pelo banco de dados do
nosso projeto db.sqlite3 .
Para ver os dados de cada tabela, vá para a aba “Navegar dados”, escolha nossa
tabela helloworld_funcionario e…
web-com-
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 11/20
04/07/2021 A Camada Model do Django (Python)
1
python manage.py shell
O shell do Django é muito útil para testar trechos de código sem ter que executar o
servidor inteiro!
Para adicionar um novo funcionário, basta criar uma instância do seu modelo e
chamar o método save() (lembra que nosso modelo herdou de Models ?).
1
from helloworld.models import Funcionario
3
funcionario = Funcionario(
4
nome='Marcos',
5
sobrenome='da Silva',
6
cpf='015.458.895-50',
7
tempo_de_servico=5,
8
remuneracao=10500.00
9
)
10
11
funcionario.save()
A API de busca de dados é ainda mais completa! Nela, você constrói sua query à
nível de objeto!
Por exemplo, para buscar todos os Funcionários, abra o shell do Django e digite:
1
funcionarios = Funcionario.objetos.all()
Ou seja, através do campo objetos podemos fazer queries incríveis sem uma linha
Gostou do conteúdo? Compartilha aí!
de SQL!
Exemplo de um query
um pouco mais complexa: python-e-
django-
model)
(https://api.whatsapp.com/send?
text=https://pythonacademy.com.br/blog/d
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 12/20
04/07/2021 A Camada Model do Django (Python)
1
funcionarios = Funcionario.objetos
2
.exclude(name="Marcos")
3
.filter(tempo_de_servico__gt=3)
4
.filter(remuneracao__lt=5000.00)
5
.all()
No exemplo, para filtrar por maior que concatenamos a string __gt (gt = greater
than) ao filtro e __lt (lt = less than) para resultados menores que.
O método .all() ao final da query serve para retornar todas as linhas do banco
que cumpram os filtros da nossa busca (também temos o first() que retorna
apenas o primeiro
registro, o last() , que retorna o último, entre outros).
1
# Primeiro, encontramos o Funcionário que desejamos deletar (id=1 por exemp
2
funcionario = Funcionario.objetos.filter(id=1).first()
4
# Agora, o deletamos!
5
funcionario.delete()
Legal, né?!
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 13/20
04/07/2021 A Camada Model do Django (Python)
1
# Primeiro, buscamos o funcionario desejado
2
funcionario = Funcionario.objetos.filter(id=13).first()
4
# Alteramos seu sobrenome
5
funcionario.sobrenome = funcionario.sobrenome + " Albuquerque"
7
# Salvamos as alterações
8
funcionario.save()
Conclusão
Com isso galera:
Modelo
Criamos nosso primeiro modelo, nosso banco de dados, vimos como visualizar os
dados com o DB Browser for SQLite e como a API de acesso a dados do Django é
simples e poderosa!
Espero ter aguçado a vontade por aprender mais do Django! O próximo post trata da
Camada View (Já está disponível! Acesse-o AQUI e AGORA
(https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-
view))! É nela que construímos a lógica de negócio do nosso projeto.
Quer levar esse conteúdo para onde for com nosso ebook GRÁTIS?
EBOOK GRÁTIS
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 14/20
04/07/2021 A Camada Model do Django (Python)
Conteúdo:
Veja como modelar sua aplicação
Utilize a robusta API de Acesso a Dados do Django
Aprenda sobre Class Based Views
Construa Middlewares próprios
Desenvolva filtros e tags customizados para criar lindos templates
BAIXE JÁ!
(/EBOOKS/DESENVOLVIMENTO-WEB-
COM-PYTHON-E-DJANGO/)
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 15/20
04/07/2021 A Camada Model do Django (Python)
Minhas redes:
(https://www.linkedin.com/in/vinicius-aramos)
(mailto:[email protected])
(https://github.com/viniciusramos91)
(https://stackoverflow.com/users/6775679/viniciusramos91)
Continue aprendendo!
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 16/20
04/07/2021 A Camada Model do Django (Python)
LISTAS NO PYTHON
(/blog/listas-no-python)
python-e-
django-
model)
(/blog/desenvolva-aplicativos-para-android-ios-com-python-e-kivy)
(https://api.whatsapp.com/send?
text=https://pythonacademy.com.br/blog/d
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 17/20
04/07/2021 A Camada Model do Django (Python)
(/blog/tipos-de-variaveis-no-python)
python-e-
django-
model)
(https://api.whatsapp.com/send?
text=https://pythonacademy.com.br/blog/d
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
(/blog/dataframes-do-pandas)
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 18/20
04/07/2021 A Camada Model do Django (Python)
← Retornar ao Blog
(/blog/index.html)
Mais
Início (/)
Zen of Python (/zen-of-python)
Blog (/blog/)
Sliders (/sliders/)
Sobre (/sobre)
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
Ebooks
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 19/20
04/07/2021 A Camada Model do Django (Python)
Cursos Parceiros
© 2021 Python Academy
python-e-
django-
model)
text=https://pythonacademy.com.br/blog/d
(https://api.whatsapp.com/send?
web-com-
model&ui=2&tf=1)
view=cm&fs=1&su=A
(https://mail.google.c
web-com-
python-e-
django-
https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model 20/20