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 to share
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 to share