如何使用django获取两个日期之间的生日列表

海梅

我正在尝试获取未来15天内生日的人的名单。我有这个模型:

class Cliente(models.Model):
    nombre                  = models.CharField(max_length=100)
    fecha_nacimiento        = models.DateField(default=datetime.date.today,blank=True,null=True)
    telefono_numero         = models.CharField(max_length=10, null=True)
    direccion               = models.CharField(max_length=100, null=True)
    otro_contacto           = models.CharField(max_length=150, null=True)

    def __unicode__(self):
        return u'%s' % self.nombre  

我的字段“ fecha_nacimiento”(出生日期)是一个models.DateField。当我可以使用以下方法获得生日在当月的人时:

mes = date.today().month
cumplen_mes = Cliente.objects.filter(fecha_nacimiento__month=mes)

并且我有一个查询集,指定在哪个月份与谁生日,但是我只想查看接下来15天内的生日。我尝试使用过滤器,但是我不知道如何连接过滤器,即:

我能做到 Cliente.objects.filter(fecha_nacimiento__day = a_day)

我阅读了有关gte&lte的文章,但无法在fecha_nacimiento字段上将此过滤器与之结合使用。

阿拉斯代尔

通常,您可以通过向过滤器传递多个关键字参数来应用多个过滤器,

Cliente.objects.filter(field1='foo', field2='bar') 

或通过链接过滤器调用:

Cliente.objects.filter(field1='foo').filter(field2='bar') 

对于您的特定问题,您可以计算15天后的日期。

如果该日期是当前月份,则查询是直接进行的(请注意,它仅适用于Django 1.9+)

today = date.today()
fifteen_days = today + timedelta(days=15)
Cliente.objects.filter(
    fecha_nacimiento__month=today.month,
    fecha_nacimiento__day__gte=today.day, # we don't want birthdays that have already happened this month
    fecha_nacimiento__day__lte=fifteen_days.day,
)

如果那个日期是下个月,那就更难了。您要么想要本月的日期,要么想要15天内的下个月的日期。在Django中,您可以使用Q()对象进行OR查询

Cliente.objects.filter(
    Q(fecha_nacimiento__month=today.month, fecha_nacimiento__day__gte=fifteen_days.day) |
    Q(fecha_nacimiento__month=fifteendays.month, fecha_nacimiento__day__lte=fifteen_days.day)
)

放在一起,您将:

today = date.today()
fifteen_days = today + timedelta(days=15)
queryset = Cliente.objects.all()
if today.month == fifteen_days.month:
    queryset = queryset.filter(
        fecha_nacimiento__month=today.month,
        fecha_nacimiento__day__gte=fifteen_days.day,
        fecha_nacimiento__day__lte=fifteen_days.day,
    )
else:
    queryset = queryset.filter(
        Q(fecha_nacimiento__month=today.month, fecha_nacimiento__day__gte=fifteen_days.day) |
        Q(fecha_nacimiento__month=fifteendays.month, fecha_nacimiento__day__lte=fifteen_days.day)
    )

上面的查询未经测试,因此可能存在语法错误,或者可能不是很正确,但是我认为这种方法会行得通。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在两个日期之间选择而不使用年份来获取生日

如何使用JavaScript获取两个日期之间的差异

如何使用XPath获取两个日期之间的秒数

如何使用熊猫获取两个日期之间的天数

获取SQL中两个日期之间的日期列表

如何在oracle中获取特定月份的两个日期之间的日期列表

获取两个日期之间的季度列表(SQL)

如何获取两个日期之间的日期

如何获取两个日期之间的月份和年份列表

如何在Java中获取两个日期之间的月份列表

如何获取年份和两个日期之间的年份列表的月份名称

如何获取SQL Server中两个日期之间的月份和年份的列表

如何获取帐户在两个日期之间进行的转发列表?

获取两个日期之间的日期

如何使用javascript / react获取两个日期之间的完整日期?

如何在两个日期之间获取值

如何获取JavaScript中两个日期之间的天数?

如何获取JavaScript中两个日期之间的区别?

如何获取两个日期范围之间的天数

如何获取两个日期之间选择的总天数?

如何计算Django中两个日期之间的差异

使用python获取两个日期之间的星期数

两个日期之间的年份列表

如何使用Sql获取两个日期之间的最少金额?

如何使用MySQL获取两个日期之间的星期数和星期几

如何正确使用ThreeTenABP获取基于UTC的两个日期之间的时间(以毫秒为单位)

如何使用codeigniter活动记录编写查询以获取两个日期之间的行数据?

如何使用派生列变换获取SSIS中两个日期之间的分钟数差异?

获取两个日期之间的天数