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/

Aplicação Django com mysql

Criando e ativando models no Django

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.

Para baixar o código como está até agora, acesse o meu github no link abaixo:
https://github.com/toticavalcanti/django_course/tree/create_models

AULA  08

AULA  10

Todas as Aulas da App Polls

Página Principal

Obrigado

Até a próxima

Aula 09 – Criando e ativando models no Django

About The Author
-

2 Comentários

  • Maria
    Reply

    Ola, esta com error:
    mysql> show tables;
    ERROR 1046 (3D000): No database selected

    fiz passo a passo a aula anterior, e estou no windows

    • toticavalcanti
      Reply

      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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>