鹡鸰查询——日期范围、类型选择和限制
Wagtail query - date range, type selection and limit
我正在尝试制作一个具有这种结构的网站:
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
那里的某个地方也应该有一个限制器,这样它就不会 return 超过 10。
不要使用 self.get_children().type(Event)
,而是使用 Event.objects.child_of(self)
。这是必要的,因为 get_children
returns 类型的对象 Page
,所有页面类型共有的基本记录。 type(Event)
子句将该查询集限制为仅事件页面,但仍将它们保留为 Page
对象,其中日期字段不可用。通过使用 Event.objects.child_of(self)
,您可以确保在整个查询过程中使用完整的 Event
模型。
此外,请确保您的过滤器子句引用了模型中定义的字段;而不是 date_range
,它可能应该是 start_range
或 end_range
。或者,如果您想要 return 在接下来的 7 天内某个时间点发生的事件,您实际上是在寻找那些在 [今天 + 7 天] 之前开始并在今天之后结束的事件,这将使过滤器:.filter(start__lte='2018-08-31', end__gte='2018-08-25')
要将查询限制为最多 10 个项目,请使用 Python 数组切片表示法:[:10]
这使得最后的 events
行如下:
events = Event.objects.child_of(self).filter(start__lte='2018-08-31', end__gte='2018-08-25').live().order_by('start')[:10]
我正在尝试制作一个具有这种结构的网站:
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
那里的某个地方也应该有一个限制器,这样它就不会 return 超过 10。
不要使用 self.get_children().type(Event)
,而是使用 Event.objects.child_of(self)
。这是必要的,因为 get_children
returns 类型的对象 Page
,所有页面类型共有的基本记录。 type(Event)
子句将该查询集限制为仅事件页面,但仍将它们保留为 Page
对象,其中日期字段不可用。通过使用 Event.objects.child_of(self)
,您可以确保在整个查询过程中使用完整的 Event
模型。
此外,请确保您的过滤器子句引用了模型中定义的字段;而不是 date_range
,它可能应该是 start_range
或 end_range
。或者,如果您想要 return 在接下来的 7 天内某个时间点发生的事件,您实际上是在寻找那些在 [今天 + 7 天] 之前开始并在今天之后结束的事件,这将使过滤器:.filter(start__lte='2018-08-31', end__gte='2018-08-25')
要将查询限制为最多 10 个项目,请使用 Python 数组切片表示法:[:10]
这使得最后的 events
行如下:
events = Event.objects.child_of(self).filter(start__lte='2018-08-31', end__gte='2018-08-25').live().order_by('start')[:10]