Repository navigation
15. Models
-
O Django utiliza o ORM (Object Relational Mapper) para realizar todas as operações de leitura, inserção, exclusão e atualização dos dados.
-
Um modelo é um objeto Python que descreve os campos e os comportamentos essenciais dos dados a serem armazenados.
-
Em geral, cada modelo mapeia uma tabela no banco de dados. Cada modelo é uma função ou classe Python que herda da classe django.db.models.Model, e cada atributo da classe representa um campo.
-
Configurando o banco de dados
-
No arquivo settings.py, existe uma variável
DATABASES, responsável pelas configurações do banco de dados:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
-
-
Exemplo de um modelo
from django.db import models class Pessoa(models.model): nome = models.CharField(max_length=50) sobrenome = models.CharField(max_length=50) def __str__(self): return self.nome- Sempre importar:
from django.db import models - Toda classe herda de
models.model - nome e sobrenome são atributos da classe Pessoa, ou seja, atributos da tabela no banco de dados
-
models.CharFieldrepresenta o tipo de dados daquela variável - A função
__str__()serve para exibir uma representação em string do objeto
- Sempre importar:
-
Tipos de dados
- AutoField: incrementa automaticamente o valor da chave primária (não é necessário, ao criar um modelo, Django faz isso)
- BigIntegerField: inteiro de 64 bits
- BooleanField: booleano (verdadeiro/falso)
- CharField(max_length): caracteres de tamanho limitado
- DateField: representação de datas
- DateTimeField: data e hora
- DecimalField(max_digits, decimal_places): números decimais. Deve ser informado o número máximo de dígitos de número e o número de casas decimais após a vírgula
- EmailField: endereços de email
- FileField: upload de arquivos
- FloatField: números de ponto flutuante
- ImageField: upload de imagens
- IntegerField: números inteiros
- GenericIPAddressField: endereços IP
- PositiveIntegerField: inteiros positivos
- TextField: texto sem tamanho definido
- TimeField: horário (datetime.time)
- URLField: URL
-
Relacionamentos entre as tabelas
- O Django possui três tipos de campos para representar os relacionamentos entre as tabelas:
-
ForeignKey(model, on_delete) Relacionamento de muitos-para-um. Possui dois argumentos obrigatórios: model: a classe a qual o modelo está relacionado; on_delete: qual o comportamento do banco de dados ao excluir um registro (CASCADE, PROTECT, SET_NULL, SET_DEFAULT, DO_NOTHING)
-
ManyToManyField(model) Relacionamento de muitos-para-muitos. Requer um argumento: a classe a qual está se relacionando
-
OneToOneField(model) Relacionamentos de um-para-um. Requer um argumento: a classe a qual está se relacionando
-
- O Django possui três tipos de campos para representar os relacionamentos entre as tabelas:
-
Criando e migrando o banco de dados
-
Com os modelos criados, devemos inicializar o banco de dados, para criar o banco de dados e suas tabelas:
$ python manage.py migrate -
Sempre que ocorrer alguma alteração no modelos, deve ser executado o comando:
$ python manage.py makemigrations -
Para atualizar apenas o aplicativo que está sendo modificado, basta executar. Substitua <nome_do_app> pelo nome do seu aplicativo
$ python manage.py makemigrations <nome_do_app> -
Para confirmar as migrações realizadas no aplicativo, é necessário executar novamente:
$ python manage.py migrate
-
-
Acessando a interface administrativa do Django
-
A interface admin do Django permite ver as tabelas criadas, além de excluir, inserir e editar dados.
-
É necessário criar usuário e senha para acessar essa interface, executando o comando:
$ python manage.py createsuperuser -
Preencha com usuário, senha e email (opcional)
-
Execute o servidor
$ python manage.py runserver -
Abra no navegador
http://localhost:8000/admin -
Entre com usuário e senha
-
Para que os modelos criados em
models.pyapareçam nesta interface, é necessário editar o arquivoadmin.py(localizado emmyapp/admin.py) -
Neste arquivo, insira as seguintes linhas:
admin.site.register(<model>)- Troque
<model>pelo nome das classes definidas emmodels.py. Insira quantas linhas forem necessárias.
- Troque
-
-
Personalizando a interface administrativa do Django
-
É possível modificar a aparência da interface admin do Django. Para isso é necessário modificar o arquivo
admin.py-
Exemplo:
class PageAdmin(admin.ModelAdmin): list_display = ['title', 'url', 'category', 'views'] list_filter = ['title'] search_fields = ['title'] fieldsets = [ ('Página', {'fields': ['category', 'title', 'url']}), ('Views', {'fields': ['views']}) ] admin.site.register(PageAdmin)
- Toda classe herda de
admin.ModelAdmin -
PageAdminestá relacionado com o modelPagedefinido emmodels.py -
list_display: altera os campos a serem exibidos na tela de edição -
list_filter: permite filtrar os registros através de um atributo -
search_fields: exibe um campo de pesquisa -
fieldsets: separa os campos por categorias
-
-