0
0
Djangoframework~20 mins

Formsets for multiple forms in Django - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Formset Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this Django formset rendering?
Given this Django formset code snippet, what HTML output will be generated for the management form part?
Django
from django import forms
from django.forms import formset_factory

class ItemForm(forms.Form):
    name = forms.CharField(max_length=100)

ItemFormSet = formset_factory(ItemForm, extra=2)

formset = ItemFormSet()

print(formset.management_form.as_p())
A<p><input type="hidden" name="form-TOTAL_FORMS" value="1" id="id_form-TOTAL_FORMS" /></p><p><input type="hidden" name="form-INITIAL_FORMS" value="0" id="id_form-INITIAL_FORMS" /></p>
B<p><input type="hidden" name="form-TOTAL_FORMS" value="0" id="id_form-TOTAL_FORMS" /></p><p><input type="hidden" name="form-INITIAL_FORMS" value="2" id="id_form-INITIAL_FORMS" /></p>
C<p><input type="hidden" name="form-TOTAL_FORMS" value="2" id="id_form-TOTAL_FORMS" /></p><p><input type="hidden" name="form-INITIAL_FORMS" value="0" id="id_form-INITIAL_FORMS" /></p><p><input type="hidden" name="form-MIN_NUM_FORMS" value="0" id="id_form-MIN_NUM_FORMS" /></p><p><input type="hidden" name="form-MAX_NUM_FORMS" value="1000" id="id_form-MAX_NUM_FORMS" /></p>
D<p><input type="hidden" name="form-TOTAL_FORMS" value="2" id="id_form-TOTAL_FORMS" /></p><p><input type="hidden" name="form-INITIAL_FORMS" value="2" id="id_form-INITIAL_FORMS" /></p>
Attempts:
2 left
💡 Hint
Remember that extra=2 means two empty forms are created, so TOTAL_FORMS is 2 and INITIAL_FORMS is 0.
state_output
intermediate
2:00remaining
What is the value of cleaned_data after validating this formset?
Consider this Django formset with two forms submitted with data. What will be the cleaned_data list after calling is_valid()?
Django
from django import forms
from django.forms import formset_factory

class ProductForm(forms.Form):
    product_name = forms.CharField(max_length=50)
    quantity = forms.IntegerField(min_value=1)

ProductFormSet = formset_factory(ProductForm, extra=0)

form_data = {
    'form-TOTAL_FORMS': '2',
    'form-INITIAL_FORMS': '0',
    'form-MIN_NUM_FORMS': '0',
    'form-MAX_NUM_FORMS': '1000',
    'form-0-product_name': 'Apples',
    'form-0-quantity': '5',
    'form-1-product_name': 'Bananas',
    'form-1-quantity': '0'
}

formset = ProductFormSet(form_data)
valid = formset.is_valid()
cleaned = formset.cleaned_data if valid else None
print(cleaned)
A[{'product_name': 'Apples', 'quantity': 5}, {'product_name': 'Bananas', 'quantity': 0}]
B[{'product_name': 'Apples', 'quantity': 5}, {'product_name': 'Bananas', 'quantity': 1}]
C[{'product_name': 'Apples', 'quantity': 5}]
Dnull
Attempts:
2 left
💡 Hint
Check the quantity field validation for the second form.
📝 Syntax
advanced
2:00remaining
Which option correctly creates two different formsets for two models in one view?
You want to create formsets for two different Django models, Author and Book, in the same view. Which code snippet correctly defines and initializes both formsets?
Django
from django.forms import modelformset_factory
from myapp.models import Author, Book

AuthorFormSet = modelformset_factory(Author, fields=('name',), extra=1)
BookFormSet = modelformset_factory(Book, fields=('title',), extra=1)

# Initialize formsets with POST data
if request.method == 'POST':
    author_formset = AuthorFormSet(request.POST, prefix='authors')
    book_formset = BookFormSet(request.POST, prefix='books')
A
author_formset = AuthorFormSet(request.POST)
book_formset = BookFormSet(request.POST)
B
author_formset = AuthorFormSet(request.POST, prefix='authors')
book_formset = BookFormSet(request.POST, prefix='books')
C
author_formset = AuthorFormSet(prefix='authors')
book_formset = BookFormSet(prefix='books')
D
author_formset = AuthorFormSet(request.POST, prefix='books')
book_formset = BookFormSet(request.POST, prefix='authors')
Attempts:
2 left
💡 Hint
When using multiple formsets in one view, each must have a unique prefix.
🔧 Debug
advanced
2:00remaining
Why does this formset always show zero forms despite extra=3?
This code tries to create a formset with 3 extra forms but the rendered formset shows no forms. What is the cause?
Django
from django import forms
from django.forms import formset_factory

class TaskForm(forms.Form):
    task = forms.CharField(max_length=100)

TaskFormSet = formset_factory(TaskForm, extra=3)

formset = TaskFormSet(data=None)

print(len(formset.forms))
ABecause data=null is passed, the formset treats it as bound with no data and shows zero forms.
BBecause extra=3 is ignored when data is null; it only applies when initial data is provided.
CBecause the formset is unbound, it should show 3 forms; the issue is elsewhere.
DBecause the formset requires initial data to show forms, extra=3 has no effect without initial.
Attempts:
2 left
💡 Hint
Check how passing data=null affects formset binding and form count.
🧠 Conceptual
expert
2:00remaining
How does prefix affect multiple formsets in one Django template?
You have two formsets in one template: author_formset with prefix 'authors' and book_formset with prefix 'books'. What is the main reason to use prefixes here?
APrefixes prevent form field name collisions so Django can distinguish which data belongs to which formset on POST.
BPrefixes automatically validate the forms without needing is_valid() calls.
CPrefixes change the formset layout in the template to group forms visually.
DPrefixes allow formsets to share the same management form without conflicts.
Attempts:
2 left
💡 Hint
Think about how HTML form input names are sent in POST requests.