menu

Questions & Answers

Django: 'list' object has no attribute '__dict__'

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)
Comments:
2023-05-26 23:55:11
Please post the full traceback.
2023-05-26 23:55:11
this resolve my issue : return redirect("ecrf:inclusion_list") instead of return super().form_valid(formset)
Answers(0) :