Django 模型字段不是动态的

Django model fields not dynamic

我的模型里有这个。

class School(models.Model):
    subscribed = models.BooleanField(default=True)
    invoice_date = models.DateField()
    remaining_days = models.IntegerField(default=30)
    
    def save(self,*args,**kwargs):
        self.remaining_days = (self.invoice_date  - date.today()).days
        if self.invoice_date <= date.today():
            self.subscribed=False
        else:
            self.subscribed=True
        return super().save(*args,**kwargs)

问题是剩余天数不会动态变化。当我编写代码时,我认为它会。我怎样才能让它每天都改变???

每次更新模型都会触发一次save方法。 Django 不会自动 运行 保存每次代码 运行s,这对性能非常不利。

您想要的可能不是使用保存方法自动为您执行此操作。我会说你需要一个预定的操作,每天 运行s 在特定时间通过实例更新它们的剩余天数。

不过,剩余天数似乎是一个计算字段。也许您不需要将它存储在数据库中,因为知道今天是哪一天以及发票日期是什么,每次您需要时都可以转到模型并进行计算。一个查询集可以为您过滤所有感兴趣的实例,而无需每天更新剩余天数。

School.objects.filter(invoice_date__lte=datetime.now()-timedelta(days=5))

这样您就可以随时查看哪些已接近截止日期,而无需存储计算字段。