I have a problem editing a formset that I am using to create several forms and link them to the same object.
Models
class Tallaje(models.Model):
id = models.BigAutoField(primary_key = True)
nombre = models.CharField(max_length = 20,unique = True)
def __str__(self):
return self.nombre
class Valor(models.Model):
id = models.BigAutoField(primary_key = True)
valor = models.CharField(max_length = 20)
tallaje = models.ForeignKey(Tallaje, default = None, on_delete = models.CASCADE)
def __str__(self):
return self.valor
View
class TallajeEditar(UpdateView):
model = Tallaje
form_class = TallajeForm
valorFormSet = inlineformset_factory(Tallaje, Valor, form=ValorForm, can_delete=True, can_order=True)
template_name = 'backend/tallaje/tallaje-editar.html'
success_url = reverse_lazy('tallajes')
def get_context_data(self,**kwargs):
context = super(TallajeEditar, self).get_context_data(**kwargs)
context['grupo'] = self.request.user.groups.get().name
if self.request.POST:
context['form'] = self.form_class(self.request.POST, instance=self.object)
context['formset'] = self.valorFormSet(self.request.POST, instance=self.object)
else:
context['form'] = self.form_class(instance=self.object)
context['formset'] = self.valorFormSet(instance=self.object)
return context
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form_class = self.get_form_class()
form = self.get_form(form_class)
formset = self.valorFormSet(request.POST, instance=self.object)
for form in formset:
form.instance.order = form.cleaned_data['ORDER']
if form.is_valid() and formset.is_valid():
form.save()
formset.save()
return redirect('tallajes')
else:
return super(TallajeEditar, self).post(request, *args, **kwargs)
If, for example, I load 10 forms and delete the 6, I save the following error when saving:
MultiValueDictKeyError at / backend / sizes / edit-size / 1 / "'value_set-6-id'"
Is there any way to skip that error or be able to reorganize the form ids before saving so they do not give this error?