mpen
mpen

Reputation: 283335

Django: How to iterate over formsets and access cleaned data?

What if I want to do something with my formset other than immediately saving it?

How can I do this?

        for form in vehicles_formset.forms:
            listing.id = None
            listing.vehicle_year = form.cleaned_data['year']
            listing.vehicle_make = form.cleaned_data['make']
            listing.vehicle_model = form.cleaned_data['model']
            listing.vin = form.cleaned_data['vin']
            listing.vehicle_runs = form.cleaned_data['runs']
            listing.vehicle_convertible = form.cleaned_data['convertible']
            listing.vehicle_modified = form.cleaned_data['modified']
            listing.save()

(Thus creating multiple listings) Apparently cleaned_data does not exist. There's a bunch of stuff in the data dict like form-0-year but it's pretty useless to me like that.

Upvotes: 4

Views: 5157

Answers (2)

Brian
Brian

Reputation: 617

Just to further the previous comment, once formset.is_valid() is called, you can also do save(commit=False) directly on the formset. This will return a list of the instances, which can then be individually modified and then saved:

forms = formset.save(commit=False)
for form in forms:
    form.some_field_name = new_value
    form.save()

Upvotes: 1

Wogan
Wogan

Reputation: 72747

Have you called vehicles_formset.is_valid() prior to your snippet above?

Additionally, using a ModelForm in your formset will allow you to get a listing instance from the form by simply doing listing = form.save(commit=False)

Upvotes: 3

Related Questions