Aula 09 – Curso de Django
Criando uma primeira aplicação com Django e mysql no windows
Criando e ativando modelos no Django
https://docs.djangoproject.com/pt-br/1.11/intro/tutorial02/
Criando e ativando modelos no django
Agora vamos definir seus modelos, o banco de dados e seus metadados.
Filosofia
Um model é a única e definitiva verdade sobre seus dados, eles contém os campos essenciais e os comportamentos para os dados.
O Django segue o princípio don’t repeat yourself (DRY). O objetivo é definir o modelo de dados em um único local e automaticamente derivar coisas a partir dele.
Isso inclui as migrações, as migrações são inteiramente derivadas de seu arquivo de modelos, são essencialmente a forma que o Django atualiza o esquema de banco de dados para coincidir com seus models.
Então, o que acontece é que o django cria as tabelas e relacionamentos entre as tabelas do banco de dados da sua aplicação sem que você precise executar comandos em SQL e relaciona aos modelos da sua aplicação.
Nessa simples aplicação de enquete, nós iremos criar dois modelos: Question e Choice. Uma Question tem uma pergunta e uma data de publicação. Uma Choice tem dois campos: o texto da escolha e um totalizador de votos. Cada Choice é associada a uma Question. Ou seja, a Choice tem a chave estrangeira de Question.
Vamos representar com classes Python. Edite o arquivo polls/models.py, ele deverá ficar assim:
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
Agora edite o arquivo mysite/settings.py adicionando a configuração da app polls:
Agora edite o arquivo mysite/settings.py adicionando a configuração da app polls:
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Agora a migration:
python manage.py makemigrations polls
Saída deverá ser algo parecido com isso:
Migrations for 'polls':
polls/migrations/0001_initial.py:
- Create model Choice
- Create model Question
- Add field question to choice
Se quiser ver detalhes de como serão criadas as tabelas Choice e Question no banco de dados quando rodar o migrate, execute o comando abaixo:
python manage.py sqlmigrate polls 0001
O makemigrations não toca no banco de dados, ele apenas guarda em um arquivo .py, nesse caso o:
0001_initial.py
Todos os comandos sql que serão executados quando for rodado o comando:
python manage.py migrate
O django criará as tabelas Choice e Question no db_mysite.
No mysql, você pode conferir que as tabelas foram criadas:
mysql -u root -p
Digite a password do seu mysql.
Selecione o banco com:
USE db_mysite;
Agora liste as tabelas:
SHOW TABLES;
Resumindo, o primeiro migrate gerou as tabelas das apps registradas no APP_INSTALLED dentro do settings.py
Depois nós criamos os modelos Question e Choice e então foi rodado o makemigrations que guardou em 0001_initial.py os comandos sql para poder gerar as tabelas Choice e Question no banco de dados, quando novamente for rodado o migrate.
Ola, esta com error:
mysql> show tables;
ERROR 1046 (3D000): No database selected
fiz passo a passo a aula anterior, e estou no windows
Oi Maria,
Você precisa primeiro selecionar o banco de dados dentro do mysql, no caso desse exemplo, o banco acho que é db_mysite, então é só usar:
use db_mysite;
Aí sim, o mysql vai saber de qual banco ele tem que mostrar as tabelas na hora que você usar o:
show tables;
Valeu, \o/. 🙂
Toti