В Django фильтровать сообщения в промежутке между двумя определенными временами

Я хочу отфильтровать сообщения, которые были добавлены в течение последних 2-3 часов. Я уже использовал timedelta и т.д., но ключевое слово filter всегда хочет получить точную дату, в то время как

dt = timezone.now() - timedelta(hours=2)

никогда не дает точного времени. Как я могу этого добиться?

models.py

from django.db import models
from datetime import datetime
# Create your models here.
class addPost(models.Model):
    date = models.DateTimeField(auto_now_add=True)
    postId = models.AutoField(primary_key=True)
    title = models.CharField(max_length=100)
    category = models.CharField(max_length=60)
    image = models.ImageField(upload_to="blog/images", default="")
    content = models.TextField(default="")

views.py

def index(request):
    dt = timezone.now() - timedelta(minutes=23)
    obj = addPost.objects.filter(date=dt)
    print(obj[0].date)
    return render(request, "blog\home.html", {"obj":obj})

Вы можете попробовать использовать фильтр "больше или равно" __gte в наборе запросов:

def index(request):
    current_time = timezone.now()

    # start will be 2 hours ago
    start_time = current_time - datetime.timedelta(hours=2)

    # using 'greater than or equal' filter
    qs = addPost.objects.filter(date__gte=start_time)
    print(qs)

    # careful: if the queryset is empty, the 'obj' will be 'None'
    obj = qs.first()

    # careful: in your version, this will raise IndexError if queryset is empty
    print(qs[0].date)

    return render(request, "blog\home.html", {"obj":obj})
Вернуться на верх