How do I filter objects in 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 objects in a field is_active

, for example:

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

      

This works great. But when I want to filter them based on the field date_start

like this:

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

      

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

.

+3


source to share


2 answers


You need to use queryset to find filters, __ gte (greater than or equal) :



announcements = Announcement.objects.all().filter(date_start__gte = datetime.now())

      

+4


source


This syntax is incorrect:

announcements = Announcement.objects.all().filter(date_start >= datetime.now())

      

filter

requires a Python keyword argument. Thus, you could:



announcements = Announcement.objects.all().filter(date_start__gte=datetime.now())

      

More on this on the Django docs: Making Queries: Searching a Field .

+3


source







All Articles