我如何在 Django 中安排任务(开始日期和结束日期)来执行一些计算并将它们保存到数据库中?

How i can Schedule tasks (with starting date and ending date) in django to perform some calculation and save them into database?

三个型号:

  1. 用户
  2. 会员资格
  3. 已购买的会员资格

应用程序如何工作

每个会员都有开始日期和结束日期。用户可以购买会员资格并将其信息存储到 PurchasedMemebership 模型中。

当会员日期到期时(结束日期大于当前日期),然后计算每个会员并将计算的值存储到 total_membership(PurchasedMemebership 模型字段)。

我有 3 个问题的解决方案

我想要什么

Django 模型

用户模型存储用户信息。

class User(models.Model):
      #Django User Model 

此模型存储会员详细信息。

class Membership(models.Model):
       title = models.CharField(max_length=100)
       start_date = models.DateTimeField(auto_now_add=True)
       end_date=  models.BooleanField(default=None)
       total_membership =  models.IntegerField(default=0)
       price = models.IntegerField(default=0)   
       PurchasedMembership = models.ManyToManyField(settings.AUTH_USER_MODEL,through='PurchasedMembership',through_fields=('Membership ', 'user'))

此模型存储已购买会员的详细信息。

class PurchasedMembership(models.Model):
        Membership = models.ForeignKey(Membership,on_delete=models.CASCADE) 
        user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, default="")
       joined_date = models.DateTimeField(auto_now_add=True)

       class Meta:
            unique_together = ('Membership ', 'user',)

该方法将被调用以执行一些计算并将它们保存到数据库中。

def perform_Calculations(request):
       #Performing calculations 

当您有需要定期完成的任务时,Celery 正是您所需要的。

# tasks.py
@app.task
def check_membership_expired():
    # check if current_date >= expired_date

您可以安排此任务,以便每隔 hour/night/day 调用一次。

from celery.schedules import crontab

app.conf.beat_schedule = {
    # Executes every Monday morning at 7:30 a.m.
    'check_membership_expired-every-monday-morning': {
        'task': 'tasks.check_membership_expired',
        'schedule': crontab(hour=7, minute=30, day_of_week=1),
    },
}