Mazas
Mazas

Reputation: 307

Django filter queryset by timedelta

What could be nice way to filter devices which response was later than, for example, 500 seconds?

So assume my model:

class Device(models.Model):
    last_response = models.DateTimeField(null=True, blank=True)

My best move was:

from django.utils import timezone

for d in Device.objects.all():
    now = timezone.now()
    if d.last_response and (now - d.last_response).seconds < 500:
        # Do something

But I don't want to query all database for this. How can I make it work with filter, like for d in Device.objects.filter(..some arguments..): ?

Upvotes: 6

Views: 5019

Answers (1)

Sergey Gornostaev
Sergey Gornostaev

Reputation: 7787

from django.utils import timezone
from datetime import timedelta
Device.objects.filter(last_response__lte=timezone.now()-timedelta(seconds=500))

Upvotes: 16

Related Questions