Django - Relacionamento 1 para N
Olá, boa tarde!
Estou precisando criar um formulário de cadastro de aluno, permitindo a inserção de 'N' telefones. Como faço isso utilizando o Django Adim?
A modelagem do sistema diz que existe a classe ALUNO que se relaciona com a classe TELEFONE, o relacionamento é 1 para N, ou seja, 1 aluno pode ter vários telefones, mas 1 telefone pertence a apenas 1 aluno.
Criei as classes da seguinte forma:
class Telefone(models.Model):
TIPO_CHOICES = (
('Celular', 'Celular'),
('Fixo', 'Fixo'),
('Comercial', 'Comercial')
)
tipo = models.CharField(u'Tipo', max_length=20, choices=TIPO_CHOICES)
descricao = models.CharField(max_length=100)
def __str__(self):
return self.descricao
class Aluno(models.Model):
SEXO_CHOICES = (
('M', 'Masculino'),
('F', 'Feminino'),
)
SITUCAO_CHOICES = (
('Ativo', 'Ativo'),
('Inativo', 'Inativo'),
('Trancada', 'Trancada')
)
matricula = models.CharField(max_length=20)
nome = models.CharField(max_length=100)
sexo = models.CharField(u'Sexo', max_length=50, choices=SEXO_CHOICES)
data_nasc = models.DateField(max_length=100)
endereco = models.CharField(max_length=100)
curso = models.ForeignKey(Curso)
situacao = models.CharField(u'Situacao', max_length=30, choices=SITUCAO_CHOICES)
telefone = models.OneToOneField(Telefone, default='', null=True, blank=True)
def __str__(self):
return self.nome
Mas quando executo a aplicação e abro a tela para cadastro de um novo aluno, os telefones cadastrados de outros alunos aparecem disponíveis no novo cadastro.
Como resolver isso?
Desde já agradeço a atenção.
Estou precisando criar um formulário de cadastro de aluno, permitindo a inserção de 'N' telefones. Como faço isso utilizando o Django Adim?
A modelagem do sistema diz que existe a classe ALUNO que se relaciona com a classe TELEFONE, o relacionamento é 1 para N, ou seja, 1 aluno pode ter vários telefones, mas 1 telefone pertence a apenas 1 aluno.
Criei as classes da seguinte forma:
class Telefone(models.Model):
TIPO_CHOICES = (
('Celular', 'Celular'),
('Fixo', 'Fixo'),
('Comercial', 'Comercial')
)
tipo = models.CharField(u'Tipo', max_length=20, choices=TIPO_CHOICES)
descricao = models.CharField(max_length=100)
def __str__(self):
return self.descricao
class Aluno(models.Model):
SEXO_CHOICES = (
('M', 'Masculino'),
('F', 'Feminino'),
)
SITUCAO_CHOICES = (
('Ativo', 'Ativo'),
('Inativo', 'Inativo'),
('Trancada', 'Trancada')
)
matricula = models.CharField(max_length=20)
nome = models.CharField(max_length=100)
sexo = models.CharField(u'Sexo', max_length=50, choices=SEXO_CHOICES)
data_nasc = models.DateField(max_length=100)
endereco = models.CharField(max_length=100)
curso = models.ForeignKey(Curso)
situacao = models.CharField(u'Situacao', max_length=30, choices=SITUCAO_CHOICES)
telefone = models.OneToOneField(Telefone, default='', null=True, blank=True)
def __str__(self):
return self.nome
Mas quando executo a aplicação e abro a tela para cadastro de um novo aluno, os telefones cadastrados de outros alunos aparecem disponíveis no novo cadastro.
Como resolver isso?
Desde já agradeço a atenção.
Isaac Silva
Curtidas 0
Respostas
Santos
14/08/2017
Opa Isaacads, beleza?
O problema aí é que você não está fazendo nenhum relacionamento entre telefones e alunos.
Da forma como está implementado, qualquer telefone que você cadastrar na tabela "Telefone" você irá conseguir atrelar a um aluno.
Uma opção, caso essa implementação não possa ser utilizada, é você relacionar os telefones após cadastrar um aluno. Então você iria cadastrar um aluno e, só depois, relacionar esse aluno com um ou mais telefones.
Deu pra pegar a idéia?
Abraços!
O problema aí é que você não está fazendo nenhum relacionamento entre telefones e alunos.
Da forma como está implementado, qualquer telefone que você cadastrar na tabela "Telefone" você irá conseguir atrelar a um aluno.
Uma opção, caso essa implementação não possa ser utilizada, é você relacionar os telefones após cadastrar um aluno. Então você iria cadastrar um aluno e, só depois, relacionar esse aluno com um ou mais telefones.
Deu pra pegar a idéia?
Abraços!
GOSTEI 0
Santos
14/08/2017
Ah, aqui na DevMedia tem um curso de como implementar um CRUD com relacionamento 1:N caso você tenha interesse: https://www.devmedia.com.br/curso/django-como-implementar-um-crud-1-n/2039
GOSTEI 0
Isaac Silva
14/08/2017
O que eu pensei era na pagina de Pessoa ter uma lista(Grid/Tabela) com
os telefones com um botão adicionar Telefone que chamaria a pagina de
Telefone tipo um modal(mesmo sem ser modal) e a cada Telefone cadastrado
ele ia preenchendo a lista(Grid/Tabela) na pagina de Pessoa, quando faço um
relacionamento simples usando ForeignKey só que no lugar do combo/select
seria uma lista(Grid/Tabela).
Forte abço.
os telefones com um botão adicionar Telefone que chamaria a pagina de
Telefone tipo um modal(mesmo sem ser modal) e a cada Telefone cadastrado
ele ia preenchendo a lista(Grid/Tabela) na pagina de Pessoa, quando faço um
relacionamento simples usando ForeignKey só que no lugar do combo/select
seria uma lista(Grid/Tabela).
Forte abço.
GOSTEI 0
Isaac Silva
14/08/2017
O que eu pensei era na pagina de Pessoa ter uma lista(Grid/Tabela) com
os telefones com um botão adicionar Telefone que chamaria a pagina de
Telefone tipo um modal(mesmo sem ser modal) e a cada Telefone cadastrado
ele ia preenchendo a lista(Grid/Tabela) na pagina de Pessoa, quando faço um
relacionamento simples usando ForeignKey só que no lugar do combo/select
seria uma lista(Grid/Tabela).
Forte abço.
os telefones com um botão adicionar Telefone que chamaria a pagina de
Telefone tipo um modal(mesmo sem ser modal) e a cada Telefone cadastrado
ele ia preenchendo a lista(Grid/Tabela) na pagina de Pessoa, quando faço um
relacionamento simples usando ForeignKey só que no lugar do combo/select
seria uma lista(Grid/Tabela).
Forte abço.
GOSTEI 0