Как установить значение модели по умолчанию для результата, возвращаемого функцией?

У меня есть функция внутри моей модели, которая генерирует случайное значение для поля модели и мне нужно установить это значение как 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() не найден в части объекта, поэтому решение моей проблемы было следующим.

  • Отмените все миграции
  • Удалите функцию класса, изменив ее область видимости и поместив ее вне класса
  • Добавьте миграцию снова
  • Запустите миграцию и она сработала
Вернуться на верх