gpt4 book ai didi

python - Wagtail 查询 - 日期范围、类型选择和限制

转载 作者:行者123 更新时间:2023-11-30 22:09:01 27 4
gpt4 key购买 nike

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

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

现在,在主页上,我想显示从今天到 future 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。

最佳答案

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

此外,请确保您的过滤子句引用模型上定义的字段;而不是 date_range ,它可能应该是 start_rangeend_range 。或者,如果您希望它返回 future 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]

关于python - Wagtail 查询 - 日期范围、类型选择和限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52026060/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com