Last Updated : 24 May, 2025
Django ModelFormsets provide a powerful way to manage multiple model-based forms on a single page. They allow you to create, update, or delete multiple instances of a model at once, using a group of forms that correspond to the model's fields.
Think of ModelFormsets as a collection of forms linked to a Django mode, similar to a data grid where each form corresponds to a single model instance.
Example Model: GeeksModelLet's start with a simple model named GeeksModel defined in models.py:
Python
from django.db import models
class GeeksModel(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
def __str__(self):
return self.title
To create a formset for this model, use Django’s modelformset_factory function.
Python
from django.forms import modelformset_factory
from .models import GeeksModel
GeeksFormSet = modelformset_factory(GeeksModel, fields=['title', 'description'])
In views.py, you can create a view to render and process the formset:
Python
from django.shortcuts import render
from django.forms import modelformset_factory
from .models import GeeksModel
def modelformset_view(request):
GeeksFormSet = modelformset_factory(GeeksModel, fields=['title', 'description'], extra=3)
if request.method == 'POST':
formset = GeeksFormSet(request.POST)
if formset.is_valid():
formset.save() # Saves all valid forms to the database
else:
formset = GeeksFormSet()
return render(request, 'home.html', {'formset': formset})
In your template (home.html), render the formset like this:
html
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ formset.as_p }}
<input type="submit" value="Submit">
</form>
We can check if the form is working or not by running development server using command:
python manage.py runserver
And then visit: http://localhost:8000/
Model FormHit submit and data will be saved in GeeksModel where server is running. One can use this data in any manner conveniently now.
Django FormsetRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4