Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to filter objects on datetime fields?

I have the following model:

class Announcement(models.Model):
    name = models.CharField(max_length=500)
    content = models.CharField(max_length=1000)
    is_active = models.BooleanField(default=False)
    date_start = models.DateTimeField()
    date_end = models.DateTimeField()

    def __str__(self):
        return self.name

I can filter the objects on is_active field like:

def announcements(request):
    announcements = Announcement.objects.all().filter(
        is_active = True
    )
    return HttpResponse(
        serializers.serialize("json", announcements))

This works fine. But when I want to filter them based on date_start field like this:

def announcements(request):
    announcements = Announcement.objects.all().filter(
        date_start >= datetime.now()
    )
    return HttpResponse(
        serializers.serialize("json", announcements))

I am getting global name 'date_start' is not defined error.

like image 736
Sefa Avatar asked Feb 18 '26 23:02

Sefa


1 Answers

You need to use queryset filter lookups, __gte (greater than or equal):

announcements = Announcement.objects.all().filter(date_start__gte = datetime.now())
like image 190
Matt Seymour Avatar answered Feb 20 '26 11:02

Matt Seymour



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!