Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como utilizar Model Formset em Django

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

1 resposta
solução!

Oi Gabriel, parece que essa dúvida é a mesma que essa: https://cursos.alura.com.br/forum/topico-como-utilizar-model-formset-em-django-29091

Vou fechar essa aqui e você pode continuar a discussão pela outra, ok?

Abraços!