0 Tage Serie
python / intermediate
Snippet

Django Signal für automatische Slug-Generierung

Django Signals ermöglichen es dir, Code auszuführen, wenn bestimmte Ereignisse im ORM auftreten. Dieses pre_save Signal generiert automatisch einen eindeutigen URL-freundlichen Slug aus dem Produktnamen und behandelt Duplikate durch Anhängen inkrementeller Zahlen.

snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from django.db.models.signals import pre_save
from django.dispatch import receiver
from django.utils.text import slugify
from .models import Product
@receiver(pre_save, sender=Product)
def generate_slug(sender, instance, **kwargs):
if not instance.slug:
base_slug = slugify(instance.name)
slug = base_slug
counter = 1
while Product.objects.filter(slug=slug).exists():
slug = f"{base_slug}-{counter}"
counter += 1
instance.slug = slug
django
Erklärung
1
@receiver(pre_save, sender=Product)
Dekorator registriert diese Funktion zur Ausführung vor dem Speichern einer Product-Instanz
2
slugify(instance.name)
Django-Hilfsfunktion konvertiert 'iPhone 15 Pro' zu 'iphone-15-pro' für URL-Kompatibilität
3
while Product.objects.filter(slug=slug).exists():
Prüfe ob generierter Slug bereits in der Datenbank existiert um Eindeutigkeit sicherzustellen
4
slug = f"{base_slug}-{counter}"
Füge Zähler-Suffix hinzu um eindeutigen Slug wie 'iphone-15-pro-2' zu erstellen