Search code examples
pythondjangodjango-viewsdjango-formsformset

Django Formset Validation - Sum Values Of Two Columns


I'm trying to get the sum values of two columns in a formset in Django. I want to extract the sum values of the two columns and do something when the sum of both meets a certain value.

View:

def bokforing(request):
    InnslagFormSet = formset_factory(form=InnslagForm, extra=3)
    if request.method == 'POST':
        formbokforing = InnslagFormSet(request.POST)
        formset = InnslagFormSet(request.POST)
        if formset.is_valid():
            for form in formset:
                if form.has_changed():
                    form.save(commit=False)
                    total = 0
                    for form1 and form2 in formset:
                        total += form1.cleaned_data["innslagDebet"]
                        total += form2.cleaned_data["innslagKredit"]
                        if total == 500:
                            return HttpResponse("Valid")

I have tried to get the sum of values of one column and it works fine, but when i try to introduce a second column it does not seem to work.

I've tried to have to two variables in the same loop. Did not work. Tried two seperate loops. Still did not work.

All help would be much appreciated.


Solution

  • To calculate the sum of values from two columns in a Django formset, you can iterate over the formset once and accumulate the values from both columns separately.

    def bokforing(request):
        InnslagFormSet = formset_factory(form=InnslagForm, extra=3)
        if request.method == 'POST':
            formset = InnslagFormSet(request.POST)
            if formset.is_valid():
                total_debet = 0
                total_kredit = 0
                for form in formset:
                    if form.has_changed():
                        form.save(commit=False)
                        debet_value = form.cleaned_data["innslagDebet"]
                        kredit_value = form.cleaned_data["innslagKredit"]
                        if debet_value is not None:
                            total_debet += debet_value
                        if kredit_value is not None:
                            total_kredit += kredit_value
                
                if total_debet + total_kredit == 500:
                    return HttpResponse("Valid")