Django ORM查询数据月,日,年?

时间:2011-08-08 15:51:52

标签: django datetime orm

所以,我知道我可以使用Django ORM在对象日期使用__lte和__gte过滤器,如下所示:

events = Event.objects.all().order_by('start_date').filter(
    start_date__lte=_day, end_date__gte=_day
)       

我还可以查询日期组件:

events = Event.objects.all().order_by('start_date').filter(
    start_date__day=_day.day, end_date__day=_day.day
)       

但是我想弄清楚的是我可以查询日期的特定部分并使用gte和lte运算符,例如以下没有的尝试工作:

events = Event.objects.all().order_by('start_date').filter(
    start_date__day__lte=8, end_date__day__gte=_day
)   

1 个答案:

答案 0 :(得分:3)

简答:不,你不能。

长(呃)回答:

在这种情况下,我将在管理器上创建一个方法,并使用.extra(where='...')(可能需要特定于DB的SQL代码)或models.QEvent个对象的组合} queryset。

class EventManager(models.Manager):
    def day_range(self, start, end):
        qs = self.get_queryset()
        qs = qs.extra(where=["day(start_date) < %s and day(end_date) > %s"],
                      params=[start, end])
        return qs

已编辑:where arg必须是序列。