Wagtail中BlogPage多对多字段变更未记录至页面修订咨询
Wagtail多对多字段页面修订记录问题解决
问题背景
在Wagtail的BlogPage页面模型中,与Django常规模型ExternalAuthor关联的多对多字段,添加或移除关联对象时,该操作不会被纳入页面修订记录,导致无法追踪是谁修改了这些关联关系。
解决办法
1. 升级Wagtail版本(首选)
你提到新版本已修复该问题,优先检查项目的Wagtail版本:
- 若使用的是旧版本(大致低于2.15版本,具体以官方修复节点为准),直接升级到最新稳定版即可,新版本已优化了跨模型多对多字段的修订捕获逻辑。
2. 旧版本手动触发修订
如果暂时无法升级,可通过重写BlogPage的save方法,主动检测多对多字段的变更并生成修订:
from wagtail.models import Page from django.db import models class BlogPage(Page): external_authors = models.ManyToManyField(ExternalAuthor, blank=True) def save(self, *args, **kwargs): # 保存前记录当前关联的作者集合 old_authors = set(self.external_authors.all()) super().save(*args, **kwargs) # 对比保存前后的关联对象,有变更则创建修订 new_authors = set(self.external_authors.all()) if old_authors != new_authors: self.save_revision()
- 注意:该方式会在多对多字段变更时额外生成修订,需测试是否与Wagtail默认的修订流程冲突,避免重复创建。
3. 改用Wagtail集群模型关联(可选)
若上述方案不适用,可将ExternalAuthor改造为Wagtail的ClusterableModel,并使用ParentalManyToManyField替代普通ManyToManyField。Wagtail的集群模型字段与页面强绑定,天生支持完整的修订记录。
内容的提问来源于stack exchange,提问作者Tanner Grimes
相关产品推荐
相关产品推荐

