g查询-日期范围,类型选择和限制

时间:2018-08-26 12:03:59

标签: python django python-3.x wagtail

我正在尝试建立具有以下结构的网站:

Home page
  - Organisation (Page model)
    - Event (Page model)

现在,在Home page上,我想显示从今天开始直到未来7天的事件,或者如果有很多则限制为10天。我给事件提供了两个值:

start = models.DateTimeField()
end = models.DateTimeField()

,我想对start进行排序。

我的第一次尝试看起来像这样,但是没有用:

def get_context(self, request):
    context = super().get_context(request)
    events = self.get_children().type(Event).filter(date__range=['2018-08-25', '2018-08-31']).live().order_by('start') 
    context['events'] = events
    return context

那里也应该有一个限制器,以使它的返回值不超过10。

1 个答案:

答案 0 :(得分:3)

使用self.get_children().type(Event)而不是使用Event.objects.child_of(self)。这是必要的,因为get_children返回类型为Page的对象,该类型是所有页面类型共有的基本记录。 type(Event)子句会将查询集限制为仅事件页面,但仍将其保留为Page对象,其中日期字段不可用。通过使用Event.objects.child_of(self),可以确保在查询过程中一直使用完整的Event模型。

此外,请确保您的filter子句引用的是模型中定义的字段;而不是date_range,它应该是start_rangeend_range。或者,如果您希望它返回在接下来的7天中某个时刻发生的事件,则您实际上是在寻找那些在[今天+ 7天]之前开始并在今天之后结束的事件,这将形成过滤器:{{ 1}}

要将查询限制为最多10个项目,请使用Python数组切片表示法:.filter(start__lte='2018-08-31', end__gte='2018-08-25')

这使得最后的[:10]行如下:

events