Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como eu crio 2 forms simultaneamente

O que eu quero é em um único templante trazer estes 2 forms simultaneamente, em páginas separadas funciona, mas os dois juntos ainda não consegui fazer. Preciso fazer um form intermediário? Estou fazendo errado algum ponto?

... forms.py

from django import forms
from .models import *


class IdiomaForm(forms.ModelForm):

    class Meta:
        model = Idioma
        fields = '__all__'


class LinguagemForm(forms.ModelForm):

    class Meta:
        model = Linguagem
        fields = '__all__'

.... views.py

def Idioma(request):
    form = IdiomaForm()
    return render(request, 'curriculo/idioma.html', {'form': form})

.... idioma.html

{% extends 'curriculo/base.html' %}
{% block content %}

    <form action="" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" class="btn btn-info" value="Salvar">
    </form>

{% endblock content %}
2 respostas

Oi Gabriel,

Eu não vim do python, nem sou especialista em Django, mas como boa prática não depende de linguagem, vou me arriscar :).

Se vc quiser um formulário apenas que seja composto pelo idioma e pela linguagem,eu acho que sua sugestão de uma classe intermediária é a melhor.

Caso não seja isso, aqui => http://www.effectivedjango.com/forms.html#multiple-forms comenta de uma situação de vc querer ter múltiplos forms numa view e fala do uso do prefixo.

Não sei se ajudei, mas como a dúvida já estava para há um tempo, me arrisquei :).

solução!

Bom ... depois de muito pesquisar a resposta era algo relativamente simples e algo da própria linguagem.

O contexto passado para a função render é um dicionário, sendo assim pode-se passar quantos argumentos quiser e com o nome que lhe convêm. Desse jeito posso ter dois formulários no mesmo template, acessando cada um pelo nome que você definiu no contexto

... views.py

def Idioma(request):
    form_idioma = IdiomaForm()
    form_ling = LinguagemForm()
    return render(request, 'curriculo/idioma.html', {'form1': form_idioma, 'form2': form_ling})

... idioma.html

<form action="" method="post">
    {% csrf_token %}
    {{ form1 }}
    <input type="submit" class="btn btn-info" value="Salvar Idioma">
</form>
<form action="" method="post">
    {% csrf_token %}
    {{ form2 }}
    <input type="submit" class="btn btn-info" value="Salvar Lingua">
</form>

{% endblock content %}