From 41feca462d2418d756af1119672633f72223e94c Mon Sep 17 00:00:00 2001 From: ismail <=> Date: Tue, 20 May 2025 18:39:35 +0300 Subject: [PATCH] fix slug unique issue --- inventory/models.py | 74 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 64 insertions(+), 10 deletions(-) diff --git a/inventory/models.py b/inventory/models.py index 9ea526ad..c4df99f5 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -188,7 +188,13 @@ class CarMake(models.Model, LocalizedNameMixin): def save(self, *args, **kwargs): if not self.slug: - self.slug = slugify(self.name) + base_slug = slugify(self.name) + self.slug = base_slug + counter = 1 + + while self.__class__.objects.filter(slug=self.slug).exclude(pk=self.pk).exists(): + self.slug = f"{base_slug}-{counter}" + counter += 1 super().save(*args, **kwargs) def __str__(self): return self.name @@ -204,7 +210,13 @@ class CarModel(models.Model, LocalizedNameMixin): slug = models.SlugField(max_length=255, unique=True, blank=True, null=True) def save(self, *args, **kwargs): if not self.slug: - self.slug = slugify(self.name) + base_slug = slugify(self.name) + self.slug = base_slug + counter = 1 + + while self.__class__.objects.filter(slug=self.slug).exclude(pk=self.pk).exists(): + self.slug = f"{base_slug}-{counter}" + counter += 1 super().save(*args, **kwargs) def __str__(self): @@ -227,7 +239,13 @@ class CarSerie(models.Model, LocalizedNameMixin): slug = models.SlugField(max_length=255, unique=True, blank=True, null=True) def save(self, *args, **kwargs): if not self.slug: - self.slug = slugify(self.name) + base_slug = slugify(self.name) + self.slug = base_slug + counter = 1 + + while self.__class__.objects.filter(slug=self.slug).exclude(pk=self.pk).exists(): + self.slug = f"{base_slug}-{counter}" + counter += 1 super().save(*args, **kwargs) def __str__(self): @@ -249,7 +267,13 @@ class CarTrim(models.Model, LocalizedNameMixin): slug = models.SlugField(max_length=255, unique=True, blank=True, null=True) def save(self, *args, **kwargs): if not self.slug: - self.slug = slugify(self.name) + base_slug = slugify(self.name) + self.slug = base_slug + counter = 1 + + while self.__class__.objects.filter(slug=self.slug).exclude(pk=self.pk).exists(): + self.slug = f"{base_slug}-{counter}" + counter += 1 super().save(*args, **kwargs) def __str__(self): @@ -288,7 +312,13 @@ class CarSpecification(models.Model, LocalizedNameMixin): slug = models.SlugField(max_length=255, unique=True, blank=True, null=True) def save(self, *args, **kwargs): if not self.slug: - self.slug = slugify(self.name) + base_slug = slugify(self.name) + self.slug = base_slug + counter = 1 + + while self.__class__.objects.filter(slug=self.slug).exclude(pk=self.pk).exists(): + self.slug = f"{base_slug}-{counter}" + counter += 1 super().save(*args, **kwargs) def __str__(self): @@ -324,7 +354,13 @@ class CarOption(models.Model, LocalizedNameMixin): slug = models.SlugField(max_length=255, unique=True, blank=True, null=True) def save(self, *args, **kwargs): if not self.slug: - self.slug = slugify(self.name) + base_slug = slugify(self.name) + self.slug = base_slug + counter = 1 + + while self.__class__.objects.filter(slug=self.slug).exclude(pk=self.pk).exists(): + self.slug = f"{base_slug}-{counter}" + counter += 1 super().save(*args, **kwargs) def __str__(self): @@ -1139,7 +1175,13 @@ class Customer(models.Model): def save(self, *args, **kwargs): if not self.slug: - self.slug = slugify(f"{self.first_name} {self.last_name}") + base_slug = slugify(f"{self.last_name} {self.first_name}") + self.slug = base_slug + counter = 1 + + while self.__class__.objects.filter(slug=self.slug).exclude(pk=self.pk).exists(): + self.slug = f"{base_slug}-{counter}" + counter += 1 super().save(*args, **kwargs) class Meta: @@ -1508,8 +1550,14 @@ class Lead(models.Model): def save(self, *args, **kwargs): self.status = self.get_status() if not self.slug: - self.slug = slugify(f"{self.first_name} {self.last_name}") - super(Lead, self).save(*args, **kwargs) + base_slug = slugify(f"{self.last_name} {self.first_name}") + self.slug = base_slug + counter = 1 + + while self.__class__.objects.filter(slug=self.slug).exclude(pk=self.pk).exists(): + self.slug = f"{base_slug}-{counter}" + counter += 1 + super().save(*args, **kwargs) class Schedule(models.Model): PURPOSE_CHOICES = [ @@ -1769,7 +1817,13 @@ class Vendor(models.Model, LocalizedNameMixin): def save(self, *args, **kwargs): if not self.slug: - self.slug = slugify(self.name) + base_slug = slugify(self.name) + self.slug = base_slug + counter = 1 + + while self.__class__.objects.filter(slug=self.slug).exclude(pk=self.pk).exists(): + self.slug = f"{base_slug}-{counter}" + counter += 1 super().save(*args, **kwargs) class Meta: verbose_name = _("Vendor")