1.9 KiB
1.9 KiB
title | class | highlighter | transition |
---|---|---|---|
Recovering deleted Wagtail pages and Django models | text-center | shiki | slide-left |
Recovering deleted Wagtail pages and Django models
Jake Howard
Senior Systems Engineer @ Torchbox
Security Team @ Wagtail
Performance Working Group @ Wagtail
layout: cover background: https://cdn.jsdelivr.net/gh/wagtail/wagtail@main/.github/wagtail-screenshot-with-browser.png
Setting the scene
layout: cover
Site history report
layout: cover
Restoring from backups
layout: cover
Partial restores from backups
layout: center
1. Spin up a database backup
layout: center
2. Locate the page models
from wagtail.models import Page
sysadmin_page = Page.objects.get(id=91)
child_pages = sysadmin_page.get_descendants()
layout: center
3. Locate what was deleted
from django.contrib.admin.utils import NestedObjects
collector = NestedObjects()
collector.collect(list(child_pages) + [sysadmin_page])
layout: center
4. Serialize
from django.core import serializers
class NoM2MSerializer(Serializer):
def handle_m2m_field(self, obj, field):
pass
def get_model_instances():
for qs in collector.data.values():
yield from qs
with open("deleted-models.json", "w") as f:
NoM2MSerializer().serialize(
get_model_instances(),
stream=f
)