python
52 lines · 2 tabs
Priya Sharma
Jan 2026
2 tabs
from django.forms import modelformset_factory
from django.shortcuts import render, redirect
from .models import Product
def bulk_edit_products(request):
ProductFormSet = modelformset_factory(
Product,
fields=['name', 'price', 'stock'],
extra=0,
can_delete=True
)
if request.method == 'POST':
formset = ProductFormSet(request.POST, queryset=Product.objects.all())
if formset.is_valid():
formset.save()
return redirect('products:list')
else:
formset = ProductFormSet(queryset=Product.objects.all())
return render(request, 'products/bulk_edit.html', {'formset': formset})
from django.forms import inlineformset_factory
from django.shortcuts import render, get_object_or_404, redirect
from .models import Order, OrderItem
def edit_order(request, order_id):
order = get_object_or_404(Order, id=order_id)
OrderItemFormSet = inlineformset_factory(
Order,
OrderItem,
fields=['product', 'quantity', 'price'],
extra=1,
can_delete=True
)
if request.method == 'POST':
formset = OrderItemFormSet(request.POST, instance=order)
if formset.is_valid():
formset.save()
return redirect('orders:detail', order_id=order.id)
else:
formset = OrderItemFormSet(instance=order)
return render(request, 'orders/edit.html', {
'order': order,
'formset': formset
})
2 files · python
Explain with highlit
Formsets handle multiple forms on one page. I use modelformset_factory for editing existing objects and inlineformset_factory for related objects. The extra parameter controls empty forms shown. I validate formsets with formset.is_valid() and save with formset.save(). For better UX, I add JavaScript to dynamically add/remove forms. The can_delete option adds delete checkboxes. This pattern is perfect for bulk editing or managing one-to-many relationships in a single view. I'm careful with max_num to prevent abuse.
Related snips
python
import os
import stat
for root, _dirs, files in os.walk('/etc'):
for name in files:
path = os.path.join(root, name)
Python security audit script for exposed risky filesystem state
python
auditing
host-security
by Kai Nakamura
1 tab
python
class Product(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(blank=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
cost = models.DecimalField(max_digits=10, decimal_places=2)
margin = models.DecimalField(max_digits=5, decimal_places=2, blank=True)
Django model signals vs overriding save
django
python
models
by Priya Sharma
2 tabs
python
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
Django URL namespacing and reverse lookups
django
python
urls
by Priya Sharma
3 tabs
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Form Validation Example</title>
<style>
HTML forms with validation and accessibility
html
forms
validation
by Alex Chang
1 tab
python
import graphene
from graphene_django import DjangoObjectType
from blog.models import Post, Comment
class PostType(DjangoObjectType):
Django GraphQL with Graphene
django
python
graphql
by Priya Sharma
2 tabs
javascript
import { Application } from "@hotwired/stimulus"
import FormSubmitController from "./controllers/form_submit_controller"
const application = Application.start()
application.debug = false
Disable submit button while Turbo form is submitting
rails
hotwire
stimulus
by codesnips
3 tabs
Share this code
Here's the card — post it anywhere.