首页 > 解决方案 > Wagtail 中的模板和模型重用

问题描述

我正在构建一个相当基本的 Wagtail 站点,并且遇到了关于模型和模板重用的问题。

假设我的网站有两种条目:

  1. 博客文章和
  2. 事件。

两个页面看起来相同并且共享许多模型字段(例如,作者、类别、介绍等)。但是,有些模型字段仅对事件条目类型有意义(例如,event_date、event_venue)。

为这个用例创建模板和模型而不在代码中重复我自己的理想方法是什么?

现在,博客和事件条目都使用相同的 HTML 模板和相同的模型。但是,当用户在 Wagtail 管理员中创建博客文章时,他或她必须“忽略”特定于事件的字段(将来可能会变得更多)。

尽管博客和活动 95% 的代码相同,我是否必须创建两个单独的模板文件和两个单独的模型?在 Wagtail 中解决这个问题的正确方法是什么?

标签: wagtailwagtail-admin

解决方案


如果您想按原样维护它,包含在一个模型和模板中,您可以为每个伪类型(博客和事件)创建单独的模型管理员,并覆盖 queryset 函数以使每个单独的模型管理员只显示您的模型管理员'正在查找,然后编辑在创建/编辑/删除时显示的面板。

class EventAdmin(ModelAdmin):
    ...


    panels = [
        FieldPanel('your_field'),
        ...
    ]

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        events = qs.filter(your_field__isnull=False)
        return events

更多信息,请访问https://docs.wagtail.io/en/stable/reference/contrib/modeladmin/index.html


推荐阅读