Как установить значение модели по умолчанию для результата, возвращаемого функцией?
У меня есть функция внутри моей модели, которая генерирует случайное значение для поля модели и мне нужно установить это значение как default для поля модели.
У меня есть следующая модель
class Info(TimeStampedModel):
info_id = models.UUIDField(primary_key=True)
generated_url = models.TextField(
null=False, blank=False, default=random
)
def random(self):
return 'customer.random.domain.com.' + ("".join(random.choices(string.ascii_uppercase + string.digits, k=5)))
Я хочу, чтобы значение по умолчанию для generated_url исходило из метода внутри модели с именем random.
но я получаю следующее исключение в Runtime:
TypeError: random() missing 1 required positional argument: 'self'
Если я добавлю parenthesis в конце функции name как
generated_url = models.TextField(
null=False, blank=False, default=random()
)
Тогда в этом случае я получаю ошибку compile time error как same:
TypeError: random() missing 1 required positional argument: 'self'
После прочтения полной трассировки стека я смог понять, что внутри одной из моих миграций у меня была random() определена как функция внутри класса model и атрибут generated_uri указывал на этот внутренний метод, так что когда я пытался изменить область видимости random() с внутри класса на вне класса, я получал исключение, которое приходило из migrations, что атрибут random() не найден в части объекта, поэтому решение моей проблемы было следующим.
- Отмените все миграции
- Удалите функцию класса, изменив ее область видимости и поместив ее вне класса
- Добавьте миграцию снова
- Запустите миграцию и она сработала