问题描述
我正在构建一个相当基本的 Wagtail 网站,但遇到了关于模型和模板重用的问题。
假设我的网站有两种条目:
- 博文和
- 事件。
两个页面看起来相同并且共享许多模型字段(例如,作者、类别、介绍等)。但是,有些模型字段仅对事件条目类型(例如 event_date、event_venue)有意义。
在不重复代码的情况下为这个用例创建模板和模型的理想方法是什么?
现在,博客和事件条目使用相同的 HTML 模板和相同的模型。但是,当用户在 Wagtail 管理员中创建博客文章时,他或她必须“忽略”特定于事件的字段(将来可能会变得更多)。
尽管博客和事件的代码 95% 相同,我是否必须创建两个单独的模板文件和两个单独的模型?在 Wagtail 中解决这个问题的正确方法是什么?
解决方法
如果你想保持它的原样,包含在一个模型和模板中,你可以为每个伪类型(博客和事件)创建单独的模型管理员,并覆盖查询集功能,使每个单独的模型管理员只显示您正在寻找的那些,然后编辑在创建/编辑/删除时显示的面板。
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