首页 > 解决方案 > 如何从发布时间过滤特定小时的帖子

问题描述

我正在尝试在特定时间显示我的帖子,这是我的 models.py

class Booking(models.Model):
    check_in = models.DateTimeField(default=timezone.now)
    check_out = models.DateTimeField(blank=True,null=True)

我想在结账后显示对象 12 小时,例如,如果我们有一个对象,它的结账时间是 2021 年 10 月 14 日上午 10 点,然后显示该帖子直到晚上 10 点!

我试过了,但没有用Booking.objects.filter(check_out__hour=12)

请问有可能吗?先感谢您

标签: pythondjangodatetime

解决方案


您可以使用以下方式过滤:

from datetime import timedelta
from django.db.models.functions import Now

Booking.objects.filter(
    check_out__gte=Now()-timedelta(hours=12)
)

您可以进一步过滤,以便使用查找 [Django-doc]check_out过滤掉任何晚于现在的对象:__range

from datetime import timedelta
from django.db.models.functions import Now

Booking.objects.filter(
    check_out__range=(Now()-timedelta(hours=12), Now())
)

Now()是数据库的时间戳。

我们还可以使用 webserver 机器的时间戳:

from datetime import timedelta
from django.utils.timezone import now

Booking.objects.filter(
    check_out__range=(now()-timedelta(hours=12), now())
)

推荐阅读