Запускается один раз для вычисляемого свойства модели Django
class Company_Car(models.Model):
@property
def days_left(self):
print("RUNNED PROPERTY")
if self.date_valid is not None and self.date_valid >= datetime.datetime.now().date():
return (self.date_valid - datetime.datetime.now().date()).days
added = models.DateTimeField(auto_now_add=True)
status = models.BooleanField(default=True)
company = models.ForeignKey(Company, on_delete=models.DO_NOTHING)
date_valid = models.DateField(null=True, blank=True)
Каждый раз, когда я спрашиваю это свойство для одной и той же записи, оно выполняется, и это нехорошо
Моя цель - свойство должно выполняться только один раз и возвращать вычисленные данные
Как это можно сделать?
Found a solution: there is a build-in decorator @cached_rpoperty
from django.utils.functional import cached_property ## HERE
class Company_Car(models.Model):
@cached_property ### AND HERE
def days_left(self):
print("RUNNED PROPERTY")
if self.date_valid is not None and self.date_valid >= datetime.datetime.now().date():
return (self.date_valid - datetime.datetime.now().date()).days
added = models.DateTimeField(auto_now_add=True)
status = models.BooleanField(default=True)
company = models.ForeignKey(Company, on_delete=models.DO_NOTHING)
date_valid = models.DateField(null=True, blank=True)