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

#django #django-models #django-rest-framework

Вопрос:

Внутри моей модели есть функция, которая генерирует случайное значение для поля модели, и мне нужно установить это значение по умолчанию для поля модели.

У меня есть следующая модель

 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 исходило из метода внутри модели, названного случайным.

но во время выполнения я получаю следующее исключение:

 TypeError: random() missing 1 required positional argument: 'self'
 

Если я добавлю скобку в конце имени функции как

 generated_url = models.TextField(
            null=False, blank=False, default=random()
        )
 

Тогда в этом случае я получаю ту же ошибку времени компиляции:

 TypeError: random() missing 1 required positional argument: 'self'
 

Ответ №1:

Так что после прочтения полной трассировки стека я смог выяснить, что внутри одного из моих миграций у меня был случайный() определяется как функция внутри класса модели и атрибут generated_uri указывал, что внутренний метод, поэтому, когда я пытался сменить сферу случайно() из внутри класса и вне класса, я получаю исключение, которое было из-за миграции , что атрибут случайный() не нашли в состав объекта таким образом, решение моей проблемы было так же.

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