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))
这样您就可以随时查看哪些已接近截止日期,而无需存储计算字段。
我的模型里有这个。
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))
这样您就可以随时查看哪些已接近截止日期,而无需存储计算字段。