从 Wagtail 页面修订中排除字段

Exclude a field from Wagtail Page revisions

我有一个扩展基本 Page 模型的 Wagtail 模型:

models.py

class EmployeePage(Page):
    eid = models.PositiveIntegerField(unique=True)        
    active = models.BooleanField(blank=True)
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    ...

    content_panels = [
        FieldPanel('eid'),            
        FieldPanel('first_name'),
        FieldPanel('last_name'),
    ]

我只是通过每日 API 导入脚本将 active 字段直接更新到实时模型,所以我希望它完全从 CMS 中排除。

import_script.py

employee = EmployeePage.objects.get(eid=imported_row.eid)
employee.active = imported_row.active
employee.save()

我可以通过不将 active 字段包含在上面的 content_panels 中来将其从 CMS 编辑视图中排除,但这似乎只是装饰性的,因为仍然始终包含一个值在页面修订中,它覆盖了我导入的值。我怎样才能拥有一个从页面修订中排除的字段?

这是一个有点老套但似乎可行的解决方案。不要从页面修订中排除该字段,而是将代码添加到更新所有页面修订的导入脚本。

import_script.py

employee = EmployeePage.objects.get(eid=imported_row.eid)
employee.status = imported_row.status
employee.save()

# Updates all page revisions
revisions = PageRevision.objects.filter(page=employee)
for r in revisions:
    r.active = imported_row.active
    r.save()