Inkrementieren des Slugs durch Vermeiden von Integritätsfehlern in der Speichermethode von Django-Modellen
Ich habe ein Modell mit zwei Feldern wie folgt
models.py
class Publisher(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=150, unique=True)
def save(self, *args, **kwargs):
if not self.id and not self.slug:
slug = slugify(self.name)
try:
slug_exits = Publisher.objects.get(slug=slug)
if slug_exits:
self.slug = slug + '_1'
except Publisher.DoesNotExist:
self.slug = slug
super(Publisher, self).save(*args, **kwargs)
Hier erstelle ich einen Slug basierend auf demname
Feld, wie wir oben sehen können
Also, wenn wir versuchen, einen Publisher mit zu erstellenname already exists
, dassave
Methode des Modells wird die hinzufügen_1
bis zum Ende.
Und wenn wir erneut versuchen, einen neuen Datensatz mit demselben zu erstellenname
, einIntegrity
Fehler wird wie folgt ausgelöst
>> Publisher.objects.create(name="abc")
result: slug will be "abc"
>> Publisher.objects.create(name="abc")
result: slug will be "abc_1"
>> Publisher.objects.create(name="abc")
result:
.................
.................
34 del cursor
35 del connection
---> 36 raise errorclass, errorvalue
37
38 re_numeric_part = re.compile(r"^(\d+)")
IntegrityError: (1062, "Duplicate entry 'abc_1' for key 'slug'")
Also, was ich will ist, wenn der Titel / Slug bereits in der Datenbank vorhanden ist und wenn Slug Nummer enthält (am Ende wie abc_1
), sollten wir diese Zahl erhöhen
Also, was ich will, ist zuincrement the number in the slug
wie unten, wenn der Titel / Slug bereits in der Datenbank vorhanden ist
abc
abc_1
abc_2
abc_3
Kann mir jemand bitte mitteilen, wie die obige Logik des Inkrementierens der Schnecke zu implementieren ist?
Danke im Voraus......