在Django中按下周的日期范围筛选模型

2024-04-29 07:11:46 发布

您现在位置:Python中文网/ 问答频道 /正文

如何根据使用Django QuerySet的两个列birthdayanniversary的日期范围过滤模型数据? 这是一个每周五调用的函数。所以日期范围是从明天,即周六到下周五

def mailer_function():
    model_data = Model.objects.filter(
                  birthday__range=["tomorrow(i.e., Saturday's date)", "next friday's date"],
                  anniversary__range=["tomorrow(i.e., Saturday's date)", "next friday's date"]
                 )

在这里,我应该得到模型_数据,其生日或周年纪念日在下周


Tags: 数据django函数模型datemailerdefrange
2条回答

您可以使用datetime.timedelta

import datetime

def next_week():
    today = datetime.date.today()
    return [
        today + datetime.timedelta(days=1),
        today + datetime.timedelta(days=7)
    ]

如果要筛选生日或周年纪念,请选中Q objects

from django.db.models import Q

queryset = Model.objects.filter(
    Q(birthday__range=next_week()) | Q(anniversary__range=next_week())
)

要安排时间,请使用您最喜欢的外部工具,例如cron。我建议将您的任务创建为management command

您可以通过使用外部程序(如anacron)按计划调用该程序来实现这一点

我建议使用Celery来实现这一点,因为它将所有计划的任务都保留在项目内部

相关问题 更多 >