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"])