Campos de ForeignKey
# Parâmetros:
related_name = "nome_para_relacao_inversa" # Substitui 'modelname_set'
related_query_name = "prefixo_consulta" # Define prefixo para buscas reversas
Modelaegm de Dados para Cursos
class ModeloBaseCurso(models.Model):
titulo = models.CharField(max_length=64)
descricao = models.TextField()
participantes = models.IntegerField(default=0)
nivel = models.IntegerField(choices=[(0, 'Iniciante'), (1, 'Intermediário')])
carga_horaria = models.IntegerField()
categoria = models.IntegerField(choices=[(0, 'Desenvolvimento'), (1, 'Infraestrutura')])
visivel = models.BooleanField(default=True)
class Meta:
abstract = True
class CursoGratuito(ModeloBaseCurso):
capa = models.ImageField(upload_to='cursos/gratuitos')
recursos = models.FileField(upload_to='anexos')
class CursoPratico(ModeloBaseCurso):
imagem = models.ImageField(upload_to='cursos/praticos')
preco_venda = models.DecimalField(max_digits=8, decimal_places=2)
custo_producao = models.DecimalField(max_digits=8, decimal_places=2)
class CursoRapido(ModeloBaseCurso):
miniatura = models.ImageField(upload_to='cursos/rapidos')
valor = models.DecimalField(max_digits=8, decimal_places=2)
duracao_estimada = models.IntegerField(verbose_name='Período sugerido (semanas)')
Impelmentação de Sistema de Cursos
Passo 1: Criação da Aplicação
cd projeto/apps
python ../../manage.py startapp cursos
Passo 2: Definição dos Modelos
class AreaConhecimento(models.Model):
nome = models.CharField(max_length=64, unique=True)
class Instrutor(models.Model):
nome = models.CharField(max_length=64)
especialidade = models.CharField(max_length=128)
bio = models.TextField()
class Disciplina(models.Model):
TIPOS = [(0, 'Pago'), (1, 'Premium'), (2, 'Certificação')]
NIVEL = [(0, 'Básico'), (1, 'Intermediário'), (2, 'Avançado')]
titulo = models.CharField(max_length=128)
capa = models.ImageField(upload_to='disciplinas')
tipo = models.SmallIntegerField(choices=TIPOS)
resumo = models.TextField()
dificuldade = models.SmallIntegerField(choices=NIVEL)
carga_horaria = models.IntegerField()
preco = models.DecimalField(max_digits=7, decimal_places=2)
area = models.ForeignKey(AreaConhecimento, on_delete=models.SET_NULL, null=True)
professor = models.ForeignKey(Instrutor, on_delete=models.SET_NULL, null=True)
class Modulo(models.Model):
disciplina = models.ForeignKey(Disciplina, related_name='modulos', on_delete=models.CASCADE)
ordem = models.PositiveSmallIntegerField()
titulo = models.CharField(max_length=128)
objetivos = models.TextField()
class Aula(models.Model):
FORMATOS = [(0, 'Material'), (1, 'Exercício'), (2, 'Vídeo')]
modulo = models.ForeignKey(Modulo, related_name='aulas', on_delete=models.CASCADE)
titulo = models.CharField(max_length=128)
sequencia = models.PositiveSmallIntegerField()
formato = models.SmallIntegerField(choices=FORMATOS, default=2)
conteudo = models.CharField(max_length=255)
Passo 3: Registro de Modelos no Admin
from django.contrib import admin
from .models import *
admin.site.register(AreaConhecimento)
admin.site.register(Disciplina)
admin.site.register(Instrutor)
admin.site.register(Modulo)
admin.site.register(Aula)
Passo 4: Migrações de Banco de Daddos
python manage.py makemigrations
python manage.py migrate
Passo 5: População de Dados
-- Exemplo de inserção de instrutor
INSERT INTO cursos_instrutor
(nome, especialidade, bio)
VALUES ('Ana Silva', 'Desenvolvimento Python', 'Instrutora com 10 anos de experiência');
-- Exemplo de inserção de disciplina
INSERT INTO cursos_disciplina
(titulo, tipo, dificuldade, preco, area_id, professor_id)
VALUES ('Python para Data Science', 1, 2, 299.90, 1, 1);