未来X天内有生日的人的查询集

2024-05-17 05:27:23 发布

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

我如何在接下来的X天内得到一组有生日的人?我看到了this的答案,但它不适合我,因为人们只得到当前的出生年份。在


Tags: 答案this年份
3条回答

假设一个这样的模型--

class Person(models.Model):
    name = models.CharField(max_length=40)
    birthday = models.DateTimeField() # their next birthday

下一步是创建一个查询,过滤掉生日介于月份和日期之间的所有记录(现在。月, 现在。天)以及(然后。月, 那么。天). 实际上,您可以使用querysetapi通过以下方式访问datetime对象的month和day属性Person.objects.filter一个像这样的关键字参数:“birthday_yumonth。”我用一个实际的querysetapi方法尝试了这个方法,但是失败了。因此,我建议简单地生成一个月/日元组的文本列表,这些元组表示您想要记录的日期范围内的每个(月、日),然后将它们组合成一个查询django.db.型号.Q,如下所示:

^{pr2}$

调试之后,它应该返回一个queryset,其中每个生日的月份和日期都等于指定元组列表中的任何月份或天数。在

假设它是datetime字段,执行如下操作(使用dimosaur答案中的future_date):

Profile.objects.get(
    Q(birthday__lte=future_date),
    Q(birthday__gte=datetime.date.today())
)

我可以想出两种不使用自定义查询的方法,都有“问题”

1)效率不高,每天查询1次

start = datetime.date.today()
max_days = 14
days = [ start + datetime.timedelta(days=i) for i in xrange(0, max_days) ]

birthdays = []
for d in days:
    for p in Profile.objects.filter(birthday__month=d.month, birthday__day=d.day):
        birthdays.append(p)

print birthdays

2)单个查询,但需要更改模型。您需要添加bday_month和bday_day integer字段。显然可以从实际日期自动填充。在

此示例的限制是,您只能对照2个月(开始月份和结束月份)进行检查。设置29天,你可以跳过2月,只显示1月31日和3月1日。在

^{pr2}$

相关问题 更多 >