Reputation: 29767
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
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