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);
Правильный город занесен в журнал.
Однако, когда он переходит к проверке в базе данных, данные не отправляются, что означает, что данные не сохраняются. Существует проблема с обновлением, поскольку, когда я нажимаю кнопку редактирования формы, где штат уже загружен в базу данных, она позволяет мне изменить город этого штата и сохраняет изменения. Но когда я изменяю штат и он обновляет список муниципалитетов, возникает проблема.