I try to implement modelformset_factory but got an error on form_valid(). 'list' object has no attribute 'dict'
Neverthless all formset are correctly registered in database
what is wrong with return super().form_valid(formset)?
TraitementFormSet = modelformset_factory(
Traitement,
form=TraitementForm,
fields=('arv_num','arv_reg','arv_reg_pre','arv_deb_dat','arv_fin_dat','arv_enc','arv_rai_eff','arv_rai_vir','arv_rai_gro','arv_rai_per','arv_rai_inc','arv_rai_aut','arv_rai_aut_pre'),
extra=1
)
@method_decorator(login_required, name="dispatch")
class TraitementFormSetCreate(SuccessMessageMixin, CreateView):
model = Traitement
form_class = TraitementForm
template_name = "ecrf/traitements_form.html"
success_message = "Fiche Traitement créée."
success_url = reverse_lazy('ecrf:inclusion_list')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['formset'] = TraitementFormSet(queryset=Traitement.objects.filter(pat=self.kwargs['pk']))
context['action'] = 'create'
context['patient'] = Patient.objects.get(ide=self.kwargs['pk'])
context['model_name'] = self.model._meta.model_name
context['is_locked'] = self.object.ver if self.object else None
return context
def post(self, request, *args, **kwargs):
formset = TraitementFormSet(request.POST)
if formset.is_valid():
return self.form_valid(formset)
def form_valid(self, formset):
print('valid',type(formset))
patient = Patient.objects.get(ide=self.kwargs["pk"])
traitements = formset.save(commit=False)
for traitement in traitements:
traitement.pat = patient
traitement.arv_sai_log = self.request.user.username
traitement.save()
return super().form_valid(formset)
def form_invalid(self, formset):
print('invalid',formset.errors)
context = self.get_context_data(formset=formset)
return self.render_to_response(context)