如何在Wagtail admin中指定子页面的顺序

问题描述 投票:0回答:1

在 Wagtail 中,请考虑以下页面类型:

class WorkshopPage(Page):
    category = models.ForeignKey(
    WorkshopCategory, on_delete=models.SET_NULL, blank=True, null=True
)

class WorkshopIndexPage(RoutablePageMixin, Page):
    subpage_types = ["WorkshopPage"]

在 wagtail 管理中,我需要按其

category__name
对 WorkshopIndexPage 的子页面进行排序。

由于在docs中它说在WorkshopPage Meta类中设置排序将不起作用(它不起作用),我已经尝试了here提出的解决方案。但是,当我在 WorkshopIndexPage 中执行此操作时:

    def get_children(self):
        qs = WorkshopPage.objects.order_by("category__name")
        return qs

我收到错误:

Cannot combine queries on two different base models.

这似乎是一个简单的用例,但我似乎无法让它工作。

wagtail wagtail-admin
1个回答
0
投票

目前 wagtail 中没有直接的方法来对子页面进行排序。

您有两个选择:

  1. 使用内联模型,这是多对多关系的内联字段。
  2. 添加您自己的字段来排序子页面

这里是实现第二种方法的更改的快速列表:

  1. 向子页面的页面模型添加一个字段来存储用于对其实例进行排序的整数:
display_order = models.PositiveIntegerField(default=0)
  1. 将元类添加到同一模型以指示用于默认排序的字段:
    class Meta:
        ordering = ["display_order"]
  1. 将此字段添加到
    content_panels
    以在编辑页面中启用它。
  2. 可选 - 通过覆盖上下文在前端实现排序:
def get_context(self, request):
    context = super().get_context(request)
    context['subpages'] = self.get_children().live().order_by('display_order')
    return context
© www.soinside.com 2019 - 2024. All rights reserved.