-
Alexa Valentová authoredAlexa Valentová authored
0161_auto_20240513_1733.py 12.63 KiB
# Generated by Django 5.0.4 on 2024-05-13 15:33
import wagtail
from django.db import migrations, models
from wagtail.blocks import CharBlock, ListBlock, PageChooserBlock, StructBlock
def migrate_people_blocks(apps, schema_editor):
# Recreate here because this block has been changed in the future
class PeopleGroupBlock(StructBlock):
title = CharBlock(label="Titulek")
slug = CharBlock(
label="Slug skupiny",
required=False,
help_text="Není třeba vyplňovat, bude automaticky vyplněno",
)
person_list = ListBlock(
PageChooserBlock(
page_type="district.DistrictPersonPage", label="Detail osoby"
),
label="Skupina osob",
)
# Get the page model
DistrictPeoplePage = apps.get_model("district", "DistrictPeoplePage")
DistrictPersonPage = apps.get_model("district", "DistrictPersonPage")
# Iterate over all pages that have the StreamField you want to update
for number, people_page in enumerate(DistrictPeoplePage.objects.all()):
# Get the old content
old_content = people_page.content.get_prep_value()
# Create a new list to store the merged blocks
merged_blocks = []
# Iterate over the old blocks and extract common fields
for old_block in old_content:
if old_block["type"] != "people_group":
continue
title = old_block["value"]["group_title"]
people = []
for person in old_block["value"]["person_list"]:
person_id = (
DistrictPersonPage.objects.filter(id=person["value"]["person"])
.values_list("id", flat=True)
.first()
)
if person_id is None:
continue
people.append(person_id)
person_block_list = []
for person_id in people:
person_block_list.append(person_id)
merged_blocks.append(
PeopleGroupBlock().to_python(
{
"title": title,
"slug": str(number),
"person_list": person_block_list,
}
)
)
for block in merged_blocks:
people_page.people.append(("people_group", block))
people_page.save()
class Migration(migrations.Migration):
dependencies = [
("district", "0160_rename_background_photo_districtpersonpage_main_image"),
]
operations = [
migrations.AlterField(
model_name="districtpeoplepage",
name="people",
field=wagtail.fields.StreamField(
[
(
"people_group",
wagtail.blocks.StructBlock(
[
("title", wagtail.blocks.CharBlock(label="Titulek")),
(
"slug",
wagtail.blocks.CharBlock(
help_text="Není třeba vyplňovat, bude automaticky vyplněno",
label="Slug skupiny",
required=False,
),
),
(
"person_list",
wagtail.blocks.ListBlock(
wagtail.blocks.PageChooserBlock(
label="Detail osoby",
page_type=["district.DistrictPersonPage"],
),
label="Skupina osob",
),
),
],
label="Seznam osob",
),
),
(
"team_group",
wagtail.blocks.StructBlock(
[
(
"title",
wagtail.blocks.CharBlock(label="Název sekce týmů"),
),
(
"slug",
wagtail.blocks.CharBlock(
help_text="Není třeba vyplňovat, bude automaticky vyplněno",
label="Slug sekce",
required=False,
),
),
(
"team_list",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"headline",
wagtail.blocks.CharBlock(
label="Titulek bloku",
required=False,
),
),
(
"card_items",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"image",
wagtail.images.blocks.ImageChooserBlock(
label="Obrázek"
),
),
(
"title",
wagtail.blocks.CharBlock(
label="Titulek",
required=True,
),
),
(
"text",
wagtail.blocks.RichTextBlock(
label="Krátký text pod nadpisem",
required=False,
),
),
(
"page",
wagtail.blocks.PageChooserBlock(
label="Stránka",
page_type=[
"district.DistrictHomePage"
],
required=False,
),
),
(
"link",
wagtail.blocks.URLBlock(
label="Odkaz",
required=False,
),
),
],
template="styleguide2/includes/molecules/boxes/card_box_block.html",
),
label="Karty s odkazy",
),
),
],
label="Karta týmu",
),
label="Týmy",
),
),
]
),
),
],
blank=True,
verbose_name="Lidé a týmy",
),
),
migrations.AddField(
model_name="districtpersonpage",
name="after_name",
field=models.CharField(
blank=True, max_length=16, null=True, verbose_name="Tituly za jménem"
),
),
migrations.AddField(
model_name="districtpersonpage",
name="before_name",
field=models.CharField(
blank=True, max_length=32, null=True, verbose_name="Tituly před jménem"
),
),
migrations.AddField(
model_name="districtpersonpage",
name="perex",
field=models.TextField(default=""),
preserve_default=False,
),
migrations.AddField(
model_name="districtpersonpage",
name="position",
field=models.CharField(
blank=True, max_length=200, null=True, verbose_name="Pozice/povolání"
),
),
migrations.AddField(
model_name="districtpersonpage",
name="primary_group",
field=models.CharField(
blank=True,
help_text="např. 'Europarlament' nebo 'Sněmovna'",
max_length=32,
null=True,
verbose_name="Kategorie",
),
),
migrations.AddField(
model_name="districtpersonpage",
name="related_people",
field=wagtail.fields.StreamField(
[
(
"person",
wagtail.blocks.PageChooserBlock(
label="Detail osoby", page_type=["main.MainPersonPage"]
),
)
],
blank=True,
verbose_name="Další lidé",
),
),
migrations.AddField(
model_name="districtpersonpage",
name="social_links",
field=wagtail.fields.StreamField(
[
(
"social_links",
wagtail.blocks.StructBlock(
[
("text", wagtail.blocks.CharBlock(label="Název")),
("link", wagtail.blocks.URLBlock(label="Odkaz")),
(
"icon",
wagtail.blocks.CharBlock(
help_text="Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>Název ikony zadejte bez tečky na začátku",
label="Ikona",
),
),
]
),
)
],
blank=True,
verbose_name="Odkazy na sociální sítě",
),
),
migrations.RunPython(migrate_people_blocks),
]