所以,我知道我可以使用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
)
答案 0 :(得分:3)
简答:不,你不能。
长(呃)回答:
在这种情况下,我将在管理器上创建一个方法,并使用.extra(where='...')
(可能需要特定于DB的SQL代码)或models.Q
上Event
个对象的组合} 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必须是序列。