Tenho uma tabela Manytomany onde um candidato ao cadastrar o currículo poderá adicionar vários idiomas.
Como criar multiplos formulários quando o usuário clicar para adicionar um novo idioma?
...models.py
class Candidato(models.Model):
'''
modelo recebe candidatos, faz a relação de
N:N entre as linguagem e idiomas
'''
TIPO_CURRICULO_CHOICES = (
(1, 'Estagio Dev'),
(2, 'Estagio Adm'),
(3, 'Desenvolvedor'),
(4, 'Gestor')
)
endereco = models.OneToOneField(
Endereco,
on_delete=models.CASCADE,
primary_key=True
)
nome = models.CharField(max_length=50)
cpf = models.CharField(max_length=14)
link_github = models.URLField(max_length=100)
pretencao_min = models.FloatField()
pretencao_max = models.FloatField()
tipo_curriculo = models.IntegerField(
choices=TIPO_CURRICULO_CHOICES,
default=1)
telefone = models.CharField(max_length=15)
email = models.EmailField(max_length=100)
linguagens = models.ManyToManyField(
Linguagem, through='CandidatoLinguagem'
)
idiomas = models.ManyToManyField(
Idioma, through='CandidatoIdioma'
)
def __unicode__(self):
return u"%s para %s" % (self.nome, self.get_tipo_curriculo_display())
class CandidatoLinguagem(models.Model):
'''
modelo uni o candidato as linguagens de programação
e quantifica o tempo de desenvolvedor
'''
candidato = models.ForeignKey(Candidato)
linguagem = models.ForeignKey(Linguagem)
experiencia = models.DecimalField(max_digits=5, decimal_places=2)
def __unicode__(self):
return u"%s -> %s (%f)" % (
self.candidato, self.linguagem, self.experiencia)
class CandidatoIdioma(models.Model):
'''
modelo uni o candidato aos idiomas falados
e quantifica o nivel de conhecimento
'''
IDIOMAS_NIVEL_CHOICES = (
(1, 'Iniciante'),
(2, 'Basico'),
(3, 'Medio'),
(4, 'Avancado'),
(5, 'Fluente')
)
candidato = models.ForeignKey(Candidato)
idioma = models.ForeignKey(Idioma)
nivel = models.IntegerField(
choices=IDIOMAS_NIVEL_CHOICES,
default=1)
def __unicode__(self):
return u"%s -> %s (%s)" % (
self.candidato, self.idioma, self.get_nivel_display())
class CandidatoLinguagem(models.Model):
'''
modelo uni o candidato as linguagens de programação
e quantifica o tempo de desenvolvedor
'''
candidato = models.ForeignKey(Candidato)
linguagem = models.ForeignKey(Linguagem)
experiencia = models.DecimalField(max_digits=5, decimal_places=2)
def __unicode__(self):
return u"%s -> %s (%f)" % (
self.candidato, self.linguagem, self.experiencia)
class CandidatoIdioma(models.Model):
'''
modelo uni o candidato aos idiomas falados
e quantifica o nivel de conhecimento
'''
IDIOMAS_NIVEL_CHOICES = (
(1, 'Iniciante'),
(2, 'Basico'),
(3, 'Medio'),
(4, 'Avancado'),
(5, 'Fluente')
)
candidato = models.ForeignKey(Candidato)
idioma = models.ForeignKey(Idioma)
nivel = models.IntegerField(
choices=IDIOMAS_NIVEL_CHOICES,
default=1)
def __unicode__(self):
return u"%s -> %s (%s)" % (
self.candidato, self.idioma, self.get_nivel_display())
...forms.py
class CandidatoLinguagem(models.Model):
'''
modelo uni o candidato as linguagens de programação
e quantifica o tempo de desenvolvedor
'''
candidato = models.ForeignKey(Candidato)
linguagem = models.ForeignKey(Linguagem)
experiencia = models.DecimalField(max_digits=5, decimal_places=2)
def __unicode__(self):
return u"%s -> %s (%f)" % (
self.candidato, self.linguagem, self.experiencia)
class CandidatoIdioma(models.Model):
'''
modelo uni o candidato aos idiomas falados
e quantifica o nivel de conhecimento
'''
IDIOMAS_NIVEL_CHOICES = (
(1, 'Iniciante'),
(2, 'Basico'),
(3, 'Medio'),
(4, 'Avancado'),
(5, 'Fluente')
)
candidato = models.ForeignKey(Candidato)
idioma = models.ForeignKey(Idioma)
nivel = models.IntegerField(
choices=IDIOMAS_NIVEL_CHOICES,
default=1)
def __unicode__(self):
return u"%s -> %s (%s)" % (
self.candidato, self.idioma, self.get_nivel_display())
class CandidatoForm(forms.ModelForm):
class Meta:
model = Candidato
exclude = ['endereco']
...template.html
{% extends 'curriculo/base.html' %}
{% block content %}
<form class="form-horizontal" method="POST">
{% csrf_token %}
<fieldset>
<legend><h1>Dados Pessoais</h1></legend>
{{ form_candidato.as_p }}
</fieldset>
<br/><br/><br/>
<button type="submit" class="btn btn-primary btn-lg btn-block">
Enviar
</button>
<br/>
</form>
{% endblock content %}
É extremamente dificil achar material sobre Django e realmente necessito desta ajuda U_U