Как лучше обновлять поле автоматически? - PullRequest
1 голос
/ 03 июня 2019

Вот что я хочу сделать: у меня есть поле 'age' в моей модели, которое я хотел бы, чтобы его значение было временем до настоящего момента - и я имею в виду, как в реальном времени, а не только создание объекта. время или обновленное время.

Сначала мне было интересно, есть ли в django какое-то динамическое поле, которое будет просто обновлять значение поля на основе формулы. Но потом я подумал, что это нереально, его нужно что-то обновить в какой-то момент времени.

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

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

Спасибо за вашу помощь.

Ответы [ 2 ]

6 голосов
/ 03 июня 2019

Это действительно неправильный подход.Вы должны сохранить статическое значение в базе данных - то есть точно время создания или обновления - и затем определить возраст, когда вам это нужно, с помощью метода Python.Например:

class MyModel(models.Model):
    updated_at = models.DateTimeField(auto_now=True)

    @property
    def age(self):
        return (datetime.datetime.now() - self.updated_at).seconds   # or whatever units
3 голосов
/ 03 июня 2019

Вы никогда не записываете подобные вещи в базу данных, вместо этого вы сохраняете дату рождения / происхождения, а затем определяете возраст, когда это необходимо.

Дополнительное время, затрачиваемое на эти вычисления, настолько мало, что, скорее всего, оно никогда не станет проблемой производительности вашего кода.

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