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......

Antworten auf die Frage(1)

Ihre Antwort auf die Frage