如何使用Django ORM仅在datetimefield中按日期查询

时间:2011-01-15 05:06:54

标签: django django-orm

我有一个带有DataTimeField的表。我想获得DateTimeField =特定日期的所有对象的列表(忽略时间部分)。

SQL看起来像:

select * from tblname where date(start)='2011-01-14'

是否可以让ORM进行此类查询?

我可以做一个start__range(...)类型的查询,但我想知道我是否可以这样做。

2 个答案:

答案 0 :(得分:4)

来自QuerySet API reference

Entry.objects.filter(pub_date__year=2005)
Entry.objects.filter(pub_date__month=12)
Entry.objects.filter(pub_date__day=6)

适用于日期和日期时间。

答案 1 :(得分:2)

MyModel.object.filter(start__year=2011, start__month=01, start__day=14)

此查询的问题在于,如果您的数据库不使用函数(Hello MySQL)支持索引,则您有一个不合适的查询。

一种替代方法是添加新字段start_date = models.DateField(...)并重载save(...)方法以正确设置字段,或者如果您更像数据库端开发,则使用相同函数的触发器在此之后,你可以这样做:

MyModel.object.filter(start_date=date(2011, 1, 13))