我正在尝试建立具有以下结构的网站:
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。
答案 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_range
或end_range
。或者,如果您希望它返回在接下来的7天中某个时刻发生的事件,则您实际上是在寻找那些在[今天+ 7天]之前开始并在今天之后结束的事件,这将形成过滤器:{{ 1}}
要将查询限制为最多10个项目,请使用Python数组切片表示法:.filter(start__lte='2018-08-31', end__gte='2018-08-25')
这使得最后的[:10]
行如下:
events