Python Tutorial
Django Add a Slug Field
A slug is a URL-friendly label, like tobias-refsnes. Use it in paths instead of a raw id.
Model and URL
SlugField on the model. Capture it in the path.
from django.db import models
class Member(models.Model):
firstname = models.CharField(max_length=255)
slug = models.SlugField(default="")
# urls.py
path("members/details/<slug:slug>", views.details, name="details")Lookup
Filter by slug in the view.
def details(request, slug):
member = Member.objects.get(slug=slug)
...📘 Real-World Deep Dive
Knowing <strong>Django Slug (Django)</strong> well is what turns Django from a curiosity into a daily tool — you'll reach for it in nearly every real project.
Real-Life Scenario
An end-to-end usage of Django Slug that you'd actually see in a data pipeline or analytics notebook.
Real-Life Example
from django.utils.text import slugify
class Post(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(unique=True, blank=True)
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super().save(*args, **kwargs)Expected Output
(no output)Common mistakes
- Forgetting to call
.save()on a model instance after mutation silently persists nothing. - Reading every row with
Model.objects.all()on a 1 M-row table OOMs the worker — use.iterator()for streaming. - Queries inside loops produce N+1 problems — pull related rows with
select_related/prefetch_related. - Treating Django Slug as a black box without reading the docs — the API has subtle defaults that bite when you scale.
🚀 Performance & Best Practices
- Add database indexes (
db_index=TrueorMeta.indexes) on columns used infilter. - Use
cache_pageon read-heavy views and setCONN_MAX_AGEto keep DB connections warm. - Generate migrations with
python manage.py makemigrations --dry-run --verbosity 3and review before committing. - When working with Django, prefer vectorised / batched operations over Python loops.
🧪 Try It Yourself
- Reproduce the snippet on a representative slice of your own data.
- Profile the snippet with
cProfileortimeitand find the single biggest improvement. - Generalise the snippet into a small, reusable function you can drop into future projects.