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 %}
{% csrf_token %}Dados Pessoais
{{ form_candidato.as_p }}{% endblock content %} ```
É extremamente dificil achar material sobre Django e realmente necessito desta ajuda U_U