python
29 lines · 1 tab
Priya Sharma
Jan 2026
1 tab
from django.db import models
from django.utils.text import slugify
class Article(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(unique=True, blank=True)
content = models.TextField()
view_count = models.IntegerField(default=0)
def save(self, *args, **kwargs):
# Auto-generate slug from title if not provided
if not self.slug:
self.slug = slugify(self.title)
# Ensure slug uniqueness
original_slug = self.slug
counter = 1
while Article.objects.filter(slug=self.slug).exclude(pk=self.pk).exists():
self.slug = f'{original_slug}-{counter}'
counter += 1
# Call parent save
super().save(*args, **kwargs)
# Post-save logic
if self.view_count > 1000:
# Maybe send notification for popular articles
pass
1 file · python
Explain with highlit
Overriding the save() method allows custom behavior before or after saving. I call super().save() to preserve default behavior. Common use cases include auto-generating slugs, updating related objects, or validating business rules. I use created check via self.pk to differentiate create vs update. For complex save logic, I consider using signals instead to keep models focused. I'm careful about save recursion and avoid calling save() on related objects that might call back. This pattern centralizes model-specific logic that must run on every save.
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
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
python
from django.db.models import Count, Avg, Sum, Q, F
from django.views.generic import TemplateView
from products.models import Product, Order, OrderItem
class DashboardView(TemplateView):
Django aggregation with annotate for statistics
django
python
database
by Priya Sharma
1 tab
python
from rest_framework import permissions
class IsOwner(permissions.BasePermission):
"""Allow only object owner to access."""
Django REST Framework permissions and authorization
django
python
rest
by Priya Sharma
2 tabs
Share this code
Here's the card — post it anywhere.