View difference between Paste ID: epAfAvpZ and GEwRumtD
SHOW: | | - or go back to the newest paste.
1
class City(models.Model):
2
    name = models.CharField(max_length=200, unique=True, verbose_name='Название')
3
    slug = models.SlugField(max_length=220, verbose_name='Slug', blank=True)
4
5
    def __str__(self):
6
        return self.name
7
8
    def make_slug(self, instance_before):
9
        if not instance_before:
10-
            self.slug = create_slug(self.name)
10+
			self.slug = unique_slug(City, create_slug(self.name), instance=self)
11
12
    def save(self, *args, **kwargs):
13
        instance_before = City.objects.get(pk=self.pk) if self.id else None
14
15
        self.make_slug(instance_before)
16
17
        super().save(*args, **kwargs)
18
19
def create_slug(val):
20
    return slugify(unidecode(val))
21
22
23
def unique_slug(model, slug, instance=None):
24
    orig = slug
25
    for x in itertools.count(1):
26
        if instance:
27
            if not model.objects.filter(slug=slug).exclude(pk=instance.pk).exists():
28
                break
29
        else:
30
            if not model.objects.filter(slug=slug).exists():
31
                break
32
        slug = '%s-%d' % (orig, x)
33
    return slug