1

I want to filter the posts which was added in between last 2 or 3 hours.. i have already used timedelta etc but the filter keyword always want to get exact date, whereas

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

never give exact datetime.. how can i achieve that??

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})
Tariq Ahmed
  • 471
  • 3
  • 14

1 Answers1

1

You could try using the "greater than or equal" filter __gte in the queryset:

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})
Ralf
  • 16,086
  • 4
  • 44
  • 68