Django как добавить поле в модель, которая зависит от того, что сначала будет создан pk

Я пытаюсь добавить хэшид, основанный на пк моей модели

class ExampleModel(models.Model):
    hash_id = models.CharField(max_length=30)

Как создается hash_id... Предположим, что 15454 - это pk моего объекта.

from hashids import Hashids
hashids = Hashids(salt='example salt')
hashids.encode(15454)
'Eo6v'

Главная причина, по которой я хочу хранить hash_id в модели, заключается в том, что я не хочу пересчитывать его каждый раз или если моя соль по какой-то причине изменится в будущем.

Есть ли способ автоматически генерировать это поле при создании объекта, поскольку сначала нужно создать PK?

Как насчет переопределения в модели сохранения? Например:

class ExampleModel(models.Model):
    hash_id = models.CharField(max_length=30)

    def save(self, *args, **kwargs):
        is_create = self.pk is None
        super().save(*args, **kwargs)

        # We got pk after save above.
        if is_create:
            hashids = Hashids(salt='example salt')
            self.hash_id = hashids.encode(self.pk)
            super().save(update_fields=["hash_id"])
            
 
Вернуться на верх