[Python] Form em Django com mais de um Model

Discussão em 'Python' iniciado por Stack, Novembro 5, 2024.

  1. Stack

    Stack Membro Participativo

    Sou novato na programação e estou tentando fazer um formulário utilizando mais de um Model em Django. Eu até consegui fazer listar os fields do forms.py, mas quando solicito pra salvar ele grava apenas os dados do primeiro model. O erro que dá é "NOT NULL constraint failed: Geral_usuario.colaboradorId_id", que acredito que seja por não conseguir recuperar o id do colaborador que acabou de ser cadastrado. Como eu poderia estar solucionando isso?

    Refiz um "mini-código" para dar uma ideia de como estou fazendo.

    models.py:

    from django.db import models

    class Colaborador(models.Model):
    nome = models.CharField()

    class Usuario(models.Model):
    user = models.CharField(unique=True)
    senha = models.CharField()
    colaboradorId = models.OneToOneField('Colaborador', on_delete=models.CASCADE)

    class Email(Contato):
    email = models.CharField()
    colaboradorId = models.ForeignKey('Colaborador', on_delete=models.CASCADE)


    forms.py:

    from django.forms import ModelForm
    from django import forms
    from .models import Colaborador, Usuario, Email

    class FormUsuario(ModelForm):
    class Meta:
    model = Usuario
    fields = ['user', 'senha']

    class FormColaborador(ModelForm):
    class Meta:
    model = Colaborador
    fields = ['nome']

    class FormEmail(ModelForm):
    class Meta:
    model = Colaborador
    fields = ['nome']


    views.py:

    from django.shortcuts import render, redirect
    from .forms import FormUsuario, FormColaborador, FormEmail

    def Cadastro(request):
    data = {}

    if request.method == "POST":
    data['colaborador'] = FormColaborador(request.POST, None)
    data['usuario'] = FormUsuario(request.POST, None)
    data['email'] = FormEmail(request.POST, None)

    if data['colaborador'].is_valid():
    colaborador = data['colaborador'].save(commit=False)
    id = colaborador.id
    if data['usuario'].is_valid():
    usuario = data['usuario']
    usuario.colaboradorId = id
    if data['email'].is_valid():
    email = data['email']
    email.colaboradorId = id
    colaborador.save()
    usuario.save()
    email.save()
    return redirect('lista')
    else:
    data['colaborador'] = FormColaborador()
    data['usuario'] = FormUsuario()
    data['email'] = FormEmail()

    return render(request, 'cadastro.html', data)


    cadastro.html:

    <form action="" method="POST">
    {% csrf_token %}
    {{ colaborador.as_p }}
    {{ usuario.as_p }}
    {{ email.as_p }}
    <button class="btn btn-success">Enviar</button>
    </form>

    Continue reading...

Compartilhe esta Página