2009-04-08 1 views
0

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

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

ответ

3

В течение нескольких лет в djangoproject открыт билет getters and setters, но не повезло. Я видел три общих подхода к ситуации вы описали:

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

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

  • Превосходное сохранение, как предлагает ozanonay.

1

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

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

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

+1

Есть две причины, по которым я не хочу этого делать: 1) это сгенерированные данные, и должно быть возможно удалить эти данные и восстановить их по требованию (если алгоритм генерации улучшен или эти данные не поддерживаются). – Pablo

+1

2) потому что для создания этого нового изображения мне нужно изображение в той же записи, что означает, что я должен проверять форму, записывать ее, а затем генерировать, а если генерация терпит неудачу, то я остаюсь с проверенной ошибкой записи , Имеет смысл генерировать его во время запроса. – Pablo

Смежные вопросы