【问题标题】:how to filter posts for a specific hour from its publishing time如何从发布时间过滤特定小时的帖子
【发布时间】:2021-10-14 17:40:17
【问题描述】:

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

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

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

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

请问可以吗?提前谢谢你

【问题讨论】:

  • 你试过过滤器中的timedella吗?

标签: python django datetime


【解决方案1】:

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

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

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

您可以进一步过滤,使得check_out 晚于现在的对象不会被__range lookup [Django-doc] 过滤掉:

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

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

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

我们还可以使用网络服务器机器的时间戳:

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

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

【讨论】:

  • 感谢您的回复,但它会返回结帐时间大于当前时间的所有其他对象,我只想指定一个特定范围check_out+12 hour然后将当前时间与结帐时间之间的范围设置为12 小时
  • @HunarMohammed:那么您应该使用__range 进行过滤,请参阅编辑(最后两个代码片段)
  • 你能看看这个问题吗?我需要为 dateimte 字段设置默认小时 stackoverflow.com/questions/69326480/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多