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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from django.db.models.signals import pre_savefrom django.dispatch import receiverfrom django.utils.text import slugifyfrom .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_slugcounter = 1while Product.objects.filter(slug=slug).exists():slug = f"{base_slug}-{counter}"counter += 1instance.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