Skip to content
Snippets Groups Projects
Commit 1c12c3e3 authored by Štěpán Farka's avatar Štěpán Farka Committed by jan.bednarik
Browse files

[ADD] convert region to district

parent 668e8485
Branches
No related tags found
2 merge requests!496Release,!492[ADD] convert region to district
Pipeline #8041 passed
from django.core.management.base import BaseCommand
from django.db import transaction
from wagtail.core.models import Page, Site
from district.models import (
DistrictAfterElectionPage,
DistrictArticlePage,
DistrictArticlesPage,
DistrictArticleTag,
DistrictCenterPage,
DistrictContactPage,
DistrictCrossroadPage,
DistrictCustomPage,
DistrictElectionBasePage,
DistrictElectionPage,
DistrictElectionPointPage,
DistrictHomePage,
DistrictPeoplePage,
DistrictPersonPage,
DistrictPersonPageForm,
DistrictPersonTag,
DistrictProgramPage,
DistrictTagsPage,
)
from region.models import (
RegionAfterElectionPage,
RegionArticlePage,
RegionArticlesPage,
RegionArticleTag,
RegionCenterPage,
RegionContactPage,
RegionCrossroadPage,
RegionCustomPage,
RegionElectionBasePage,
RegionElectionPage,
RegionElectionPointPage,
RegionHomePage,
RegionPeoplePage,
RegionPersonPage,
RegionPersonPageForm,
RegionPersonTag,
RegionProgramPage,
RegionTagsPage,
)
"""
Dict that holds related model from district module for region model
"""
migration_map = {
RegionHomePage: DistrictHomePage,
RegionArticleTag: DistrictArticleTag,
RegionArticlePage: DistrictArticlePage,
RegionArticlesPage: DistrictArticlesPage,
RegionContactPage: DistrictContactPage,
RegionTagsPage: DistrictTagsPage,
RegionPersonTag: DistrictPersonTag,
RegionPersonPageForm: DistrictPersonPageForm,
RegionPersonPage: DistrictPersonPage,
RegionPeoplePage: DistrictPeoplePage,
RegionElectionBasePage: DistrictElectionBasePage,
RegionAfterElectionPage: DistrictAfterElectionPage,
RegionElectionPointPage: DistrictElectionPointPage,
RegionElectionPage: DistrictElectionPage,
RegionProgramPage: DistrictProgramPage,
RegionCenterPage: DistrictCenterPage,
RegionCrossroadPage: DistrictCrossroadPage,
RegionCustomPage: DistrictCustomPage,
}
def get_page_data_dict(data_dict):
"""
Function that clear unnecessary data from page dict
"""
data_dict.pop("id")
data_dict.pop("alias_of_id")
data_dict.pop("content_type_id")
data_dict.pop("depth")
data_dict.pop("expire_at")
data_dict.pop("expired")
data_dict.pop("footperson_coord_id", None)
data_dict.pop("footperson_electman_id", None)
data_dict.pop("footperson_media_id", None)
data_dict.pop("go_live_at")
data_dict.pop("has_unpublished_changes")
data_dict.pop("last_published_at")
data_dict.pop("latest_revision_created_at")
data_dict.pop("live_revision_id")
data_dict.pop("live")
data_dict.pop("locale_id")
data_dict.pop("locked")
data_dict.pop("locked_at")
data_dict.pop("locked_by_id")
data_dict.pop("numchild")
data_dict.pop("path")
data_dict.pop("translation_key")
data_dict.pop("url_path")
data_dict.pop("page_ptr_id")
data_dict.pop("specific", None)
data_dict.pop("specific_class", None)
data_dict.pop("_cached_parent_obj", None)
data_dict.pop("_state")
data_dict.pop("_wagtail_cached_site_root_paths", None)
return data_dict
def handle_child_pages(region_root_page, district_root_page):
child_pages = list(region_root_page.get_children())
while child_pages:
child = child_pages.pop(0)
child_specific = child.specific
page_class = child_specific.__class__
DistrictChildPage = migration_map[page_class]
tmp_data_dict = child_specific.__dict__.copy()
data_dict = get_page_data_dict(tmp_data_dict)
district_child_page = DistrictChildPage(**data_dict)
district_root_page.add_child(instance=district_child_page)
district_child_page.save()
district_child_page.save_revision().publish()
if child.get_children():
handle_child_pages(child, district_child_page)
class Command(BaseCommand):
help = """Zmigruje všechny stránky z modulu region do modulu district"""
def handle(self, *args, **options):
with transaction.atomic():
for region_hp in RegionHomePage.objects.all():
data_dict = region_hp.__dict__.copy()
data = get_page_data_dict(data_dict)
district_hp = DistrictHomePage(**data)
district_hp.slug = region_hp.slug
region_hp.slug = "old_" + region_hp.slug
region_hp.save()
root = Page.get_first_root_node()
root.add_child(instance=district_hp)
district_hp.save()
district_hp.save_revision().publish()
sites = Site.objects.filter(root_page_id=region_hp.id)
for site in sites:
site.root_page = district_hp
site.save()
handle_child_pages(region_hp, district_hp)
region_hp.delete()
# Generated by Django 4.0.4 on 2022-05-11 12:58
import django.db.models.deletion
import wagtail.core.blocks
import wagtail.core.fields
import wagtail.images.blocks
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("region", "0037_alter_regionarticlepage_content"),
]
operations = [
migrations.AlterField(
model_name="regionelectionpointpage",
name="guarantor",
field=models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="region.regionpersonpage",
),
),
migrations.AlterField(
model_name="regionhomepage",
name="footperson_coord",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="region.regionpersonpage",
verbose_name="Koordinátor",
),
),
migrations.AlterField(
model_name="regionhomepage",
name="footperson_electman",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="region.regionpersonpage",
verbose_name="Volební manažer",
),
),
migrations.AlterField(
model_name="regionhomepage",
name="footperson_media",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="region.regionpersonpage",
verbose_name="Kontakt pro média",
),
),
]
......@@ -143,7 +143,7 @@ class RegionHomePage(
footperson_coord = models.ForeignKey(
"region.RegionPersonPage",
verbose_name="Koordinátor",
on_delete=models.PROTECT,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name="+",
......@@ -154,7 +154,7 @@ class RegionHomePage(
footperson_electman = models.ForeignKey(
"region.RegionPersonPage",
verbose_name="Volební manažer",
on_delete=models.PROTECT,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name="+",
......@@ -165,7 +165,7 @@ class RegionHomePage(
footperson_media = models.ForeignKey(
"region.RegionPersonPage",
verbose_name="Kontakt pro média",
on_delete=models.PROTECT,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name="+",
......@@ -766,7 +766,9 @@ class RegionAfterElectionPage(RegionElectionBasePage):
class RegionElectionPointPage(RegionElectionBasePage):
### FIELDS
guarantor = models.ForeignKey("region.RegionPersonPage", on_delete=models.PROTECT)
guarantor = models.ForeignKey(
"region.RegionPersonPage", on_delete=models.SET_NULL, null=True
)
list_image = models.ForeignKey(
"wagtailimages.Image",
on_delete=models.PROTECT,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment