Select Git revision
0094_alter_districtelectioncampaignpage_candidates.py

jan.bednarik authored
0094_alter_districtelectioncampaignpage_candidates.py 13.03 KiB
# Generated by Django 4.0.4 on 2022-07-22 07:53
import wagtail.blocks
import wagtail.fields
import wagtail.images.blocks
from django.db import migrations
from wagtail.blocks import StreamValue
def person_chooser_list_block_to_compact_block(block):
for person_page in block["value"]["candidate_list"]:
person_page["type"] = "person_page"
return block
def compact_block_to_person_chooser_list_block(block):
for index, compact_block in enumerate(block["value"]["candidate_list"]):
if compact_block["type"] == "person_page":
compact_block["type"] = "item"
else:
del block["value"]["candidate_list"][index]
return block
def get_content(page, mapper):
stream_data = []
mapped = False
for block in page.candidates.raw_data:
if block["type"] == "candidates":
stream_data.append(mapper(block))
mapped = True
else:
stream_data.append(block)
return stream_data, mapped
def migrate(apps, mapper):
DistrictElectionCampaignPage = apps.get_model(
"district", "DistrictElectionCampaignPage"
)
for page in DistrictElectionCampaignPage.objects.all():
candidates, mapped = get_content(page, mapper)
if mapped:
page.candidates = StreamValue(page.candidates, candidates, is_lazy=True)
page.save()
def forwards(apps, schema_editor):
migrate(apps, person_chooser_list_block_to_compact_block)
def backwards(apps, schema_editor):
migrate(apps, compact_block_to_person_chooser_list_block)
class Migration(migrations.Migration):
dependencies = [
("district", "0093_alter_districthomepage_subheader"),
]
operations = [
migrations.AlterField(
model_name="districtelectioncampaignpage",
name="candidates",
field=wagtail.fields.StreamField(
[
(
"candidates",
wagtail.blocks.StructBlock(
[
(
"candidate_list",
wagtail.blocks.StreamBlock(
[
(
"person_page",
wagtail.blocks.PageChooserBlock(
label="Osoba",
page_type=[
"district.DistrictPersonPage"
],
),
),
(
"person_block",
wagtail.blocks.StructBlock(
[
(
"title",
wagtail.blocks.CharBlock(
label="Jméno a příjmení",
max_length=128,
required=True,
),
),
(
"job",
wagtail.blocks.CharBlock(
help_text="Např. 'Informatik'",
label="Povolání",
max_length=128,
required=False,
),
),
(
"profile_photo",
wagtail.images.blocks.ImageChooserBlock(
label="Profilová fotka",
required=False,
),
),
(
"email",
wagtail.blocks.EmailBlock(
label="Email",
required=False,
),
),
(
"city",
wagtail.blocks.CharBlock(
label="Město/obec",
max_length=64,
required=False,
),
),
(
"age",
wagtail.blocks.IntegerBlock(
label="Věk",
required=False,
),
),
(
"is_pirate",
wagtail.blocks.BooleanBlock(
default=True,
label="Je členem Pirátské strany?",
required=False,
),
),
(
"other_party",
wagtail.blocks.CharBlock(
label="Strana",
max_length=64,
required=False,
),
),
(
"other_party_logo",
wagtail.images.blocks.ImageChooserBlock(
help_text="Vyplňte pokud osoba není Pirát",
label="Logo strany",
required=False,
),
),
(
"facebook_url",
wagtail.blocks.URLBlock(
label="Odkaz na Facebook",
required=False,
),
),
(
"instagram_url",
wagtail.blocks.URLBlock(
label="Odkaz na Instagram",
required=False,
),
),
(
"twitter_url",
wagtail.blocks.URLBlock(
label="Odkaz na Twitter",
required=False,
),
),
(
"youtube_url",
wagtail.blocks.URLBlock(
label="Odkaz na Youtube kanál",
required=False,
),
),
(
"flickr_url",
wagtail.blocks.URLBlock(
label="Odkaz na Flickr",
required=False,
),
),
]
),
),
],
label="Kandidáti",
),
),
(
"candidate_list_big_count",
wagtail.blocks.IntegerBlock(
default=7,
label="Počet kanditátů s velkým náhledem",
),
),
(
"candidate_list_shown_count",
wagtail.blocks.IntegerBlock(
default=16,
label="Počet zobrazených kandidátů při načtení stránky (včetně velkých náhledů)",
),
),
(
"cta_text",
wagtail.blocks.CharBlock(
label="Text 'call-to-action' baneru",
required=False,
),
),
(
"cta_link",
wagtail.blocks.URLBlock(
label="Odkaz 'call-to-action' baneru",
required=False,
),
),
(
"cta_button_text",
wagtail.blocks.CharBlock(
label="Text tlačítka 'call-to-action' baneru",
max_length=24,
required=False,
),
),
]
),
)
],
blank=True,
use_json_field=None,
verbose_name="Kandidátní listina",
),
),
migrations.RunPython(forwards, backwards),
]