开发者

Django: Querying time from datetime fields

On o postgresql db based Django, how can I filter by time for a datetimefield as below?

class Foo(models.Model):
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()

IE: I want to filter Foo objects with "16:30" 开发者_如何学Gostart_date and "19:00" end_date.

Thanks.


What about adding in a TimeField? http://docs.djangoproject.com/en/dev/ref/models/fields/#timefield

Otherwise you would need to write a custom query to take advantage of the database´s time capabilites since DateTimeFields don't have that capability natively in Django.

You could consider writing a function to denormalize hours and minutes from start_date to a new start_time field and then query the start_time field.


Solution to my own q:

   def query_by_times(start_hour, start_min, end_hour, end_min):
        query = 'EXTRACT(hour from start_date) = %i and EXTRACT(minute from start_date) = %i and EXTRACT(hour from end_date) = %i and EXTRACT(minute from end_date) = %i' % (start_hour, start_min, end_hour, end_min)
        return Foo.objects.extra(where=[query])


In your situation, database normalization looks like thebest solution, since execution time and system load will rise as your related database table keeps more records...

Another solution to do this without using database filer functions is using filter alongside lambda:

from datetime import time
records = Foo.objects.all()
filtered = filter(lambda x: (time(16,30)==x.start_date.time() and time(19,0)==x.end_date.time()), records)

But using this on a large dataset will need too much time and system resource.


Try

Foo.objects.filter(start_date = MyDate1, end_date = MyDate2)

where MyDate1 and MyDate2 are your defined datetime objects. It should work, right?


I think which you need uses the range[1].

[1]http://docs.djangoproject.com/en/1.2/ref/models/querysets/#range

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜