在 wagtail 中过滤 InlinePanel 中的项目

Filter items from an InlinePanel in wagtail

对于一小部分事件,我在页面模型中使用了 InlinePanel。现在我想按日期过滤这些事件,就像我在使用带有子页面的 @property 时所做的那样:date__gte=date.today() 只显示页面 TourdatenIndexPag 上的未来事件。如何实现?

我的实现:

class EventItem(LinkFields):
    date = models.DateField("Datum")
    ...

    panels = [FieldPanel('date')]

    class Meta:
        abstract = True


class TourdatenPageEventItem(Orderable, EventItem):
    page = ParentalKey('md.TourdatenIndexPage', related_name='event_items')


class TourdatenIndexPage(Page):
    ...
    content_panels = Page.content_panels + [
        InlinePanel('event_items', label="Events"),
    ]

在哪里以及如何访问和过滤这些 event_items

在您的页面模型上创建一个方法以return您想要的查询集:

class TourdatenIndexPage(Page):
    def future_event_items(self):
        return self.event_items.filter(date__gte=date.today())

然后,在你的模板上,你可以参考self.future_event_items:

{% for event in self.future_event_items %}
    <li>{{ event.date }}</li>
{% endfor %}