Skip to content

Instantly share code, notes, and snippets.

@JuniorLima
Created June 7, 2013 11:14
Show Gist options
  • Save JuniorLima/5728585 to your computer and use it in GitHub Desktop.
Save JuniorLima/5728585 to your computer and use it in GitHub Desktop.
Salvar dois models em um único formulário quando existir uma ForeignKey
<form method="POST">
{% csrf_token %}
<p><label>Deseja se identificar?</label>{{ form.anonimo }}</p>
<div class="control-group">
<p><label>Nome</label>{{ formP.nome }}</p>
<p><label>CPF</label>{{ formP.cpf }}</p>
<p><label>RG</label>{{ formP.rg }}</p>
<p><label>Telefone</label>{{ formP.telefone }}</p>
</div>
<p><label>Qual é o tipo da sua manifestação?</label>{{ form.objeto }}</p>
<p><label>Selecione o departamento que deseja enviar</label>{{ form.unidade }}</p>
<p><label>Como deseja receber a resposta?</label>{{ form.resposta_ch }}</p>
<p><label>Como você avalia a atual gestão?</label>{{ form.avaliacaogestao }}</p>
<legend>Escreva sua manifestação</legend>
<p>{{ form.observacao }}</p>
<div class="form-actions">
<button type="submit" class="btn btn-primary">Enviar manifestação</button>
</div>
</form>
class PessoaForm(forms.ModelForm):
nome = forms.CharField(max_length=100)
cpf = forms.CharField(max_length=11)
rg = forms.CharField(max_length=20)
telefone = forms.CharField(max_length=15)
class Meta:
model = Pessoas
class ProcessoForm(forms.ModelForm):
class Meta:
model = Processos
observacao = forms.Field(widget=forms.Textarea)
objeto = forms.ModelChoiceField(queryset=Objetos.objects.filter(especie__id =9))
unidade = forms.ModelChoiceField(queryset=Unidades.objects.all())
class ManifestacoesForm(ProcessoForm):
class Meta:
model = Manifestacoes
exclude = ['codigo', 'advogados', 'autor', 'orgaos', 'autor_p', 'status_ch', 'ano', 'transferido', 'arquivado', 'ala', 'estante', 'prateleira', 'caixa', 'cancelamento', 'motivo_cancelamento', 'serie', 'orgao', 'provocacao', 'especie', 'manifestacao_ch', 'pessoa', 'nome', 'cpf', 'rg']
class Pessoas(models.Model):
nome = models.CharField('Nome', max_length = 100)
class Processos(models.Model):
pessoa = models.ForeignKey(Pessoas, verbose_name='Pessoas', blank=True, null=True)
class Manifestacoes(Processos):
def cadastrarmanifestacao(request):
# Se dados forem passados via POST
if request.method=='POST':
form = ManifestacoesForm(request.POST)
formP = PessoaForm(request.POST)
# se o formulario for valido
if form.is_valid() and formP.is_valid():
pes = formP.save()
man = form.save(commit=False)
man.pessoa = pes
man.save() # cria um novo usuario a partir dos dados enviados
return render_to_response('ouvidoria/confirmacao.html')
else:
form = ManifestacoesForm()
formP = PessoaForm()
return render_to_response('ouvidoria/cadastromanifestacao.html', {'form': form, 'formP': formP}, context_instance = RequestContext(request))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment