Запускается один раз для вычисляемого свойства модели 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)
Вернуться на верх