我正在使用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.a.m将end_date字段与today.date进行比较。如果今天< end_date,Membership_status字段自动更改为0。
我听说我应该使用django-kronos(https://github.com/jgorset/django-kronos)。 但我无法理解使用方法。
有没有人可以告诉我如何实现我想要的细节?
任何帮助对我都非常有帮助,谢谢!
答案 0 :(得分:0)
首先,这不是您原始查询的答案,而只是对您未来的建议,
永远不要将函数调用传递到字段默认值。如果您这样做,将在迁移时评估该功能。如果您查看迁移文件,您可以确定。而是将其包装在函数中并将其作为可调用函数传递。
例如:
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)
这样,只要创建NEXT_MONTH_DAY
的实例,就会调用函数Member
。
修改强>:
对于您的原始查询,我还没有测试过代码,但我想您正在寻找类似的东西,
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()