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

标签 python django python-3.x wagtail

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

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/

相关文章:

django - 使用 Django Oauth Toolkit 获取 token

python - 有没有办法在 Entry() 中存在 int 之前使 OptionMenu() 不可用?

python - 在 Python 中制作字符串系列

python - pymongo 集合对象序列化 __getnewargs__ 方法

python - Django 分页。如果我有 100 万行怎么办?

python - Django:为什么 'Class' 对象不可迭代

python - 无法在 python3.5 中安装 hashlib - 错误代码 1

python - 在字符级别对单词列表进行编码

python - numpy : ValueError: object of too small depth for desired array

python - reshape 和堆叠 2D 阵列以形成 3D 阵列