Как сгенерировать значение поля при первом обращении к нему? - PullRequest
0 голосов
/ 08 апреля 2009

Как использовать Django, как сгенерировать значение поля при первом обращении к нему? Затем сохраняем значение в поле.

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

Ответы [ 2 ]

3 голосов
/ 08 апреля 2009

В djangoproject уже пару лет открыто получателей и установщиков билетов, но не повезло. Я видел три общих подхода к описываемой вами ситуации:

  • Поместите поле вашей модели под другим именем, скажем, image_field, и напишите пару получатель / установщик (используя синтаксис property Python) с именем image в вашем объекте, который запрашивает это поле. Это будет работать для случайного использования вашими функциями, но любые вызовы из самой структуры, очевидно, будут игнорировать ваш метод получения / установки.

  • Создайте свое собственное настраиваемое поле подкласс, чтобы по возможности использовать магию для вас.

  • Отменить сохранение, как предлагает ozanonay.

1 голос
/ 08 апреля 2009

Есть ли причина, по которой вы не смогли сделать это, когда объект был сохранен? Потому что это было бы тривиально легко сделать, переопределив метод сохранения в соответствующей модели, например:

def save(self, force_insert=False, force_update=False):
    if not self.image:
        self.image = foo
    super(RelevantModel, self).save(force_insert, force_update)

Конечно, если для вас существует существенная разница между временем первого сохранения объекта и временем первого обращения к определенному полю, то это не решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...