我正在使用django制作一个网站。
class Member(models.Model):
...
end_date = models.DateField(blank=True, default=(datetime.now() + timedelta(days=30)))
Membership_status = models.IntegerField(blank=True, null=True, default=1) # 1 = active, 0=deactivate, 2=refund
我想做的是每凌晨 1.m. 将end_date字段与 today.date 进行比较,如果今天的一天 我
听说我应该使用django-kronos(https://github.com/jgorset/django-kronos(。 但是我无法理解使用方法。
有没有人可以告诉我我如何实现我想要的东西的细节?
任何帮助都会对我非常有帮助,谢谢!
首先,这不是对你原始查询的回答,而只是对你未来的建议,
切勿将函数调用传递到字段默认值中。如果这样做,将在迁移时评估函数。如果您查看迁移文件,您可以肯定地看到。而是将其包装在一个函数中,并将其作为可调用对象传递。
例如:
from django.utils import timezone
def TODAY():
return timezone.now().date()
def NEXT_MONTH_DAY():
return TODAY() + timedelta(days=30)
现在,在您的模型中,
class Member(models.Model):
...
end_date = models.DateField(blank=True, default=NEXT_MONTH_DAY)
这样,每当创建Member
实例时,都会调用函数NEXT_MONTH_DAY
。
编辑:
对于您的原始查询,我还没有测试代码,但我想您正在寻找类似的东西,
import kronos
@kronos.register('0 1 * * *')
def the_task():
for member in Member.objects.all():
if TODAY() == member.end_date:
member.Membership_status = 0
member.save()