Django errorlist в форме Select Valid Choice

Ситуация следующая: Я создаю форму, в которой я получаю данные для некоторых полей из API. Я пробовал отлаживать все возможные способы, но не могу понять, почему данные не сохраняются в базе данных. Каждый раз, когда я нажимаю кнопку submit, я получаю следующую ошибку:

<ul class="errorlist"><li>municipio<ul class="errorlist"><li>Select a valid choice. Afuá is not one of the available choices.</li></ul></li></ul>

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

Мой models.py:

# apps/parametrizacao/models.py

from django.db import models



class RegraFiscal(models.Model):
    REGIME_TRIBUTARIO_CHOICES = [
        ('Simples Nacional', 'Simples Nacional'),
        ('Lucro Presumido', 'Lucro Presumido'),
        ('Lucro Real', 'Lucro Real'),
        ('Misto', 'Misto')
    ]
    
    PORTE_CHOICES = [
        ('ME', 'Microempresa (ME)'),
        ('EPP', 'Empresa de Pequeno Porte (EPP)'),
        ('Demais', 'Demais')
    ]
    nome = models.CharField(max_length=255, default='Padrão')
    regime_tributario = models.CharField(max_length=20, choices=REGIME_TRIBUTARIO_CHOICES)
    porte = models.CharField(max_length=10, choices=PORTE_CHOICES, default='ME')
    aliquota_csll = models.DecimalField(max_digits=5, decimal_places=2, default=0)
    aliquota_irpj = models.DecimalField(max_digits=5, decimal_places=2, default=0)
    aliquota_pis = models.DecimalField(max_digits=5, decimal_places=2, default=0)
    aliquota_cofins = models.DecimalField(max_digits=5, decimal_places=2, default=0)
    aliquota_icms = models.DecimalField(max_digits=5, decimal_places=2, default=0)
    aliquota_ipi = models.DecimalField(max_digits=5, decimal_places=2, default=0)
    aliquota_iss = models.DecimalField(max_digits=5, decimal_places=2, default=0)
    aliquota_inss = models.DecimalField(max_digits=5, decimal_places=2, default=0)

    def __str__(self):
        return f"{self.nome} - {self.porte}"
    
class Empresa(models.Model):
    nome = models.CharField(max_length=255)
    cnpj = models.CharField(max_length=18)
    inscricao_estadual = models.CharField(max_length=20, blank=True, null=True)
    inscricao_municipal = models.CharField(max_length=20, blank=True, null=True)
    cnae_preponderante = models.CharField(max_length=255)
    natureza_juridica = models.CharField(max_length=255)
    endereco = models.CharField(max_length=255)
    numero = models.CharField(max_length=10)
    complemento = models.CharField(max_length=255, blank=True, null=True)
    cep = models.CharField(max_length=9)
    bairro = models.CharField(max_length=255)
    municipio = models.CharField(max_length=255)
    uf = models.CharField(max_length=2)
    email = models.EmailField()
    telefone = models.CharField(max_length=15)
    regra_fiscal = models.ForeignKey(RegraFiscal, on_delete=models.SET_NULL, null=True, blank=True)

    def __str__(self):
        return self.nome
    
    def save(self, *args, **kwargs):
        self.cnpj = ''.join(filter(str.isdigit, self.cnpj))  # Remove tudo que não for número antes de salvar
        super(Empresa, self).save(*args, **kwargs)

    def format_cnpj(self):
        cnpj = self.cnpj
        return f'{cnpj[:2]}.{cnpj[2:5]}.{cnpj[5:8]}/{cnpj[8:12]}-{cnpj[12:]}'
    

my Views.py:

from django.shortcuts import render, redirect, get_object_or_404
from django.views.generic import ListView
from .models import Empresa, RegraFiscal
from .forms import EmpresaForm, RegraFiscalForm
from django.urls import reverse_lazy
from django.views.generic.edit import DeleteView
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.db import transaction

@login_required
def config_empresa(request):
    empresa_id = request.GET.get('id')
    empresa = None
    if empresa_id:
        empresa = get_object_or_404(Empresa, id=empresa_id)

    if request.method == 'POST':
        form = EmpresaForm(request.POST, instance=empresa)
        if form.is_valid():
            try:
                with transaction.atomic():
                    form.save()
                return redirect('empresa_list')
            except Exception as e:
                print(f"Erro ao salvar a empresa: {e}")
        else:
            print(f"Erros no formulário: {form.errors}")
    else:
        form = EmpresaForm(instance=empresa)

    return render(request, 'parametrizacao/empresa/config_empresa.html', {'form': form})


@login_required
def config_regra_fiscal(request):
    regra_fiscal_id = request.GET.get('id')
    regra_fiscal = None
    if regra_fiscal_id:
        regra_fiscal = get_object_or_404(RegraFiscal, id=regra_fiscal_id)

    if request.method == 'POST':
        form = RegraFiscalForm(request.POST, instance=regra_fiscal)
        if form.is_valid():
            form.save()
            return redirect('regra_fiscal_list')
    else:
        form = RegraFiscalForm(instance=regra_fiscal)

    return render(request, 'parametrizacao/regra_fiscal/config_regra_fiscal.html', {'form': form})

@login_required
def empresa_relatorio(request):
    empresas = Empresa.objects.select_related('regra_fiscal').all()
    return render(request, 'parametrizacao/empresa/empresa_relatorio.html', {'empresas': empresas})

@method_decorator(login_required, name='dispatch')
class EmpresaListView(ListView):
    model = Empresa
    template_name = 'parametrizacao/empresa/empresa_list.html'
    context_object_name = 'empresas'

@method_decorator(login_required, name='dispatch')
class EmpresaDeleteView(DeleteView):
    model = Empresa
    template_name = 'parametrizacao/empresa/empresa_confirm_delete.html'
    success_url = reverse_lazy('empresa_list')

@method_decorator(login_required, name='dispatch')
class RegraFiscalListView(ListView):
    model = RegraFiscal
    template_name = 'parametrizacao/regra_fiscal/regra_fiscal_list.html'
    context_object_name = 'regras_fiscais'

@method_decorator(login_required, name='dispatch')
class RegraFiscalDeleteView(DeleteView):
    model = RegraFiscal
    template_name = 'parametrizacao/regra_fiscal/regra_fiscal_confirm_delete.html'
    success_url = reverse_lazy('regra_fiscal_list')

Мой Forms.py:

мой Шаблон:

Я пытаюсь выбрать UF (штат) и municipioSelect (выбранный город) в форме таким образом, чтобы этот выбор осуществлялся через публичный API, который предоставляет все города в Бразилии.

Однако, когда я нажимаю кнопку submit, форма возвращает правильный город, как показано в моей отладке:

console.log("Selected municipality on submit:", selectedMunicipio);

Правильный город занесен в журнал.

Однако, когда он переходит к проверке в базе данных, данные не отправляются, что означает, что данные не сохраняются. Существует проблема с обновлением, поскольку, когда я нажимаю кнопку редактирования формы, где штат уже загружен в базу данных, она позволяет мне изменить город этого штата и сохраняет изменения. Но когда я изменяю штат и он обновляет список муниципалитетов, возникает проблема.

Вернуться на верх