Можно ли использовать исключение catch для сигнала pre_save?

У меня есть простой хук жизненного цикла "перед созданием" / сигнал джанго.

class Item(models.Model):
    title = CharField()
    slug = CharField(unique=True)
    
    @hook(BEFORE_CREATE):
    def populate_slug(self):
        slug = slugify(self.title)
        n = 1
        while Item.objects.filter(slug=(f"${slug}-${n}")).exists():
            n += 1
        self.slug = f"${slug}-${n}"

Можно ли сохранить этот дополнительный запрос .exists() и как-то использовать ошибку исключения IntegrityError (поскольку в slug есть unique=True) для обновления slug?

Что-то вроде:

@hook(BEFORE_CREATE):
def populate_slug(self):
    for i in range(0,100):
        slug = slugify(self).title
        n = 1
        while True:
            try:
                self.slug = f"${slug}-${n}"
                # This defeats the purpose of using
                # a "before create" signal though
                self.save()
            except:
                n += 1
                continue
            break

            
Вернуться на верх