Atma
Atma

Reputation: 29767

cant get form values in django formset

I am trying to get the results of a specific form in a formset. I have tried with a formset and modelformset with no sucess.

With a FormSet

My view looks like this:

def display(request, pk=None, action='add'):
    customer = get_customer(request)        
    qs = CustomerActivity.objects.filter(customer=customer)


    AuthorFormSet = modelformset_factory(CustomerActivity, form=ActivityEntryForm, extra=0)
    if request.method == 'POST':
        formset = AuthorFormSet(request.POST)

        if form.is_valid:
            print 'form valied'
            for form in formset:
                 print form.cleaned_data['duration']
            duration = request.POST.get('duration')
            activity = request.POST.get('activity')

            print duration


    else:
        formset = AuthorFormSet(queryset=qs)

    context = {
        'formset':formset,
    }
    return render(request, 'activity/activity.html', context)

I get an error:

CustomerActivityForm' object has no attribute 'duration'

I don't even have a form named CustomerActivityForm, it called ActivityEntryForm:

class ActivityEntryForm(forms.ModelForm):

    duration = forms.IntegerField(required=False)

    class Meta:
        model = CustomerActivity
        fields = ('duration',)

My regular formset attempt

Here is my view:

def display_2(request, pk=None, action='add'):
    customer = get_customer(request)
    entered_at, day_start, day_end = get_date_query_elements(request)


    qs = CustomerActivity.objects.filter(customer=customer).values()

    ArticleFormSet = formset_factory(ActivityEntryForm, extra=0)
    if request.method == 'POST':


        formset = ArticleFormSet(request.POST, request.FILES)
        if formset.is_valid():
            for form in formset:
                print form.duration
            pass
    else:
        formset = ArticleFormSet(initial=qs)

    context = {
        'formset':formset,
    }
    return render(request, 'activity/activity.html', context)

Here is the form:

class ActivityEntryForm(forms.Form):
    duration = forms.IntegerField(required=False)

Here I get the error:

ActivityEntryForm' object has no attribute 'duration'

How can I get the duration value???

Upvotes: 0

Views: 1539

Answers (1)

Daniel Roseman
Daniel Roseman

Reputation: 599470

As with any form, the validated data is in form.cleaned_data, which is a dictionary.

print form.cleaned_data['duration']

This is explained in great detail in the documentation.

Upvotes: 2

Related Questions