Reputation: 8992
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.
Upvotes: 3
Views: 934
Reputation: 19922
This syntax is wrong:
announcements = Announcement.objects.all().filter(date_start >= datetime.now())
filter
requires Python keyword arguments. So in effect you could:
announcements = Announcement.objects.all().filter(date_start__gte=datetime.now())
More on that on Django docs: Making queries: Field lookups.
Upvotes: 3
Reputation: 9415
You need to use queryset filter lookups, __gte (greater than or equal):
announcements = Announcement.objects.all().filter(date_start__gte = datetime.now())
Upvotes: 4