Django, extract value from formset

Question:

I have overridden save_formset method to extract data from admin page. Here is how my code looks like:

def save_formset(self, request, form, formset, change):
    for f in formset:
        print('Voter address is: ', f['voter_address'])
    super().save_formset(request,form, formset, change)

I get output as:

enter image description here

But I want to extract actual value which is "klncklas," and for second one I would like to know that there is no value present. How I can achieve this?

Asked By: Sandeep Thota

||

Answers:

def save_formset(self, request, form, formset, change):
    # Create instances. Each instance will be a "row" (obj) of the inline model
    instances = formset.save(commit=False)
    # Iterate over the instances (objects of the Inline Model)
    for instance in instances:
        # Get the object's attribute (Model field)
        print(instance.voter_address)
    super().save_formset(request,form, formset, change)
Answered By: nik_m

In save_formset(), you need to use formset.save(commit=False) to get the submitted inline objects in Django Admin as shown below. *Don’t worry formset.save(commit=False) does not save objects but does return objects while formset.save() equivalent to formset.save(commit=True) does save and return objects:

def save_formset(self, request, form, formset, change):
    for f in formset.save(commit=False): # Here
        print('Voter address is: ', f['voter_address'])
    super().save_formset(request, form, formset, change)

You can see my answer explaining about save(commit=False) vs save() and how to customize the submitted inline objects in Django Admin.

Answered By: Kai – Kazuya Ito