В 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})