将datefield与今天进行比较并每天自动更改整数域

时间:2017-07-23 07:03:43

标签: python django

我正在使用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)。 但我无法理解使用方法。

有没有人可以告诉我如何实现我想要的细节?

任何帮助对我都非常有帮助,谢谢!

1 个答案:

答案 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()