Django - я больше не могу сохранить форму с динамическим набором форм

Мне нужна ваша помощь в решении проблемы, которую я не могу решить или найти решение в интернете.

У меня есть форма регистрации пользователя, которая раньше работала правильно. Но возникла необходимость вставить динамический набор форм.

Однако, теперь с набором форм при заполнении и отправке формы, данные не сохраняются в базе данных и вместо перенаправления на список пользователей, я снова перенаправляюсь на форму, уже заполненную данными, которые не удалось отправить и без отображения какой-либо ошибки.

  • models.py
class Contato(models.Model):
    tipo = (
        ('Residencial', 'Residencial'),
        ('Comercial', 'Comercial'),
        ('Celular', 'Celular'),
        ('WhatsApp', 'WhatsApp'),
    )

    # Contato
    email_p = models.EmailField(blank=True, null=True, verbose_name='E-mail pessoal')
    email_c = models.EmailField(blank=True, null=True, verbose_name='E-mail corporativo')
    proprietario = models.ForeignKey(Perfil, on_delete=models.CASCADE)
    tipo_contato = models.CharField(verbose_name='Tipo', choices=tipo, max_length=11, blank=True, null=True)
    telefone = models.CharField(max_length=16, blank=True, null=True)

    def __str__(self):
        return self.proprietario, self.telefone
  • forms.py
  • views.py
""" Implementando classes para o método de CREATE """

class UsuarioCreate(GroupRequiredMixin, LoginRequiredMixin, SuccessMessageMixin, CreateView):
    template_name = 'Cadastro/formulario_usuario.html'
    group_required = u"Adminstrador"
    form_class = UsuarioForm
    success_url = reverse_lazy('listar-usuario')
    success_message = "Cadastrado com sucesso"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['titulo'] = 'Registro de novo usuário'
        context['botao'] = 'Cadastrar'
        if self.request.POST:
            context['form'] = UsuarioForm(self.request.POST)
            context['contato_form'] = UsuarioFormSet(self.request.POST)
        else:
            context['form'] = UsuarioForm()
            context['contato_form'] = UsuarioFormSet()
        return context

    def form_valid(self, form):
        group = self.request.POST.get('grupo')
        grupo = get_object_or_404(Group, id=group)
        self.object.groups.add(grupo)
        self.object.save()

        Perfil.objects.create(
            usuario=self.object,
            nome_completo=self.request.POST.get('nome_completo'),
            cpf=self.request.POST.get('cpf'),
            rg=self.request.POST.get('rg'),
            org_exp=self.request.POST.get('org_exped'),
            telefone=self.request.POST.get('telefone'),
            local=self.request.POST.get('local'),
            data_nascimento=self.request.POST.get('data_nasc'),
            data_emissao=self.request.POST.get('data_emiss'),
            nome_mae=self.request.POST.get('nome_mae'),
            nome_pai=self.request.POST.get('nome_pai'),
            tipo_contato=self.request.POST.get('tipo_contato'),
            numero_casa=self.request.POST.get('numero_casa'),
            Estado=self.request.POST.get('estado'),
            Cidade=self.request.POST.get('cidade'),
            Bairro=self.request.POST.get('bairro'),
            complemento=self.request.POST.get('complemento_casa'),
            dt_cadastro=self.request.POST.get('dt_cadastro'),
            dt_inicio=self.request.POST.get('dt_inicio'),
            email_p=self.request.POST.get('email_p'),
            email_c=self.request.POST.get('email_c'),
        )
        context = self.get_context_data()
        forms = context['form']
        formset = context['contato_form']
        if forms.is_valid() and formset.is_valid():
            self.object = form.save()
            forms.instance = self.object
            formset.instance = self.object
            forms.save()
            formset.save()
        else:
            return self.render_to_response(self.get_context_data(form=form))

        return super(UsuarioCreate, self).form_valid(form)
Вернуться на верх