Skip to content
Snippets Groups Projects
Commit d96dc912 authored by jan.bednarik's avatar jan.bednarik
Browse files

district: Refactor models and reset and squash migrations

parent cd778f8a
No related branches found
No related tags found
2 merge requests!173Release,!134Weby pro MS
# Generated by Django 3.1.1 on 2020-10-07 06:42
# Generated by Django 3.1.3 on 2021-01-18 22:54
import django.db.models.deletion
import django.utils.timezone
import modelcluster.contrib.taggit
import modelcluster.fields
import wagtail.core.blocks
import wagtail.core.fields
import wagtailmetadata.models
from django.db import migrations, models
import shared.models
class Migration(migrations.Migration):
initial = True
dependencies = [
("wagtailcore", "0052_pagelogentry"),
("taggit", "0003_taggeditem_add_unique_index"),
("wagtailimages", "0022_uploadedimage"),
("shared", "0001_initial"),
("wagtailcore", "0059_apply_collection_ordering"),
]
operations = [
migrations.CreateModel(
name="DistrictArticlePage",
fields=[
(
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
(
"perex",
models.CharField(blank=True, max_length=250, verbose_name="perex"),
),
(
"text",
wagtail.core.fields.RichTextField(
blank=True, verbose_name="text článku"
),
),
(
"date",
models.DateField(
default=django.utils.timezone.now, verbose_name="datum článku"
),
),
(
"author",
models.CharField(
blank=True, max_length=250, null=True, verbose_name="autor"
),
),
(
"image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="wagtailimages.image",
verbose_name="obrázek",
),
),
(
"search_image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailimages.image",
verbose_name="Search image",
),
),
],
options={
"verbose_name": "Aktualita",
},
bases=(
shared.models.SubpageMixin,
wagtailmetadata.models.MetadataMixin,
"wagtailcore.page",
models.Model,
),
),
migrations.CreateModel(
name="DistrictTagsPage",
fields=[
(
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
(
"search_image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailimages.image",
verbose_name="Search image",
),
),
],
options={
"verbose_name": "Stránka s tagy",
},
bases=(
shared.models.SubpageMixin,
wagtailmetadata.models.MetadataMixin,
"wagtailcore.page",
models.Model,
),
),
migrations.CreateModel(
name="DistrictPersonPage",
fields=[
(
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
("perex", models.TextField(blank=True, verbose_name="Perex osoby")),
(
"person",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="shared.person",
),
),
(
"search_image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailimages.image",
verbose_name="Search image",
),
),
],
options={
"verbose_name": "Detail osoby",
},
bases=(
shared.models.SubpageMixin,
wagtailmetadata.models.MetadataMixin,
"wagtailcore.page",
models.Model,
),
),
migrations.CreateModel(
name="DistrictPeoplePage",
fields=[
(
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
(
"search_image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailimages.image",
verbose_name="Search image",
),
),
],
options={
"verbose_name": "Lidé",
},
bases=(
shared.models.SubpageMixin,
wagtailmetadata.models.MetadataMixin,
"wagtailcore.page",
models.Model,
),
),
migrations.CreateModel(
name="DistrictHomePage",
fields=[
......@@ -54,6 +246,30 @@ class Migration(migrations.Migration):
"forum",
models.URLField(blank=True, null=True, verbose_name="Fórum URL"),
),
(
"contact_email",
models.EmailField(
blank=True, max_length=250, verbose_name="kontaktni email"
),
),
(
"contact_phone",
models.TextField(
blank=True, max_length=250, verbose_name="kontaktni telefon"
),
),
(
"contact_newcomers",
models.URLField(
blank=True, null=True, verbose_name="URL pro zájemce o členství"
),
),
(
"donation_page",
models.URLField(
blank=True, null=True, verbose_name="URL pro příjem darů"
),
),
(
"matomo_id",
models.IntegerField(
......@@ -62,6 +278,39 @@ class Migration(migrations.Migration):
verbose_name="Matomo ID pro sledování návštěvnosti",
),
),
(
"footperson_coord",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="footperson_coord",
to="shared.person",
verbose_name="Koordinátor",
),
),
(
"footperson_electman",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="footperson_electman",
to="shared.person",
verbose_name="Volební manažer",
),
),
(
"footperson_media",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="footperson_media",
to="shared.person",
verbose_name="Kontakt pro média",
),
),
(
"search_image",
models.ForeignKey(
......@@ -83,4 +332,156 @@ class Migration(migrations.Migration):
models.Model,
),
),
migrations.CreateModel(
name="DistrictContactPage",
fields=[
(
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
(
"contact_people",
wagtail.core.fields.StreamField(
[
(
"item",
wagtail.core.blocks.StructBlock(
[
(
"name",
wagtail.core.blocks.CharBlock(label="Role"),
),
(
"person",
wagtail.core.blocks.PageChooserBlock(
label="Osoba",
page_type=[
"district.DistrictPersonPage"
],
),
),
]
),
)
],
blank=True,
verbose_name="Kontakty",
),
),
(
"search_image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailimages.image",
verbose_name="Search image",
),
),
],
options={
"verbose_name": "Kontakty",
},
bases=(
shared.models.SubpageMixin,
wagtailmetadata.models.MetadataMixin,
"wagtailcore.page",
models.Model,
),
),
migrations.CreateModel(
name="DistrictArticleTag",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"content_object",
modelcluster.fields.ParentalKey(
on_delete=django.db.models.deletion.CASCADE,
to="district.districtarticlepage",
),
),
(
"tag",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="district_districtarticletag_items",
to="taggit.tag",
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="DistrictArticlesPage",
fields=[
(
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
(
"max_items",
models.IntegerField(
blank=True,
null=True,
verbose_name="Maximalni pocet prvku na strance",
),
),
(
"search_image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailimages.image",
verbose_name="Search image",
),
),
],
options={
"verbose_name": "Aktuality",
},
bases=(
shared.models.SubpageMixin,
wagtailmetadata.models.MetadataMixin,
"wagtailcore.page",
models.Model,
),
),
migrations.AddField(
model_name="districtarticlepage",
name="tags",
field=modelcluster.contrib.taggit.ClusterTaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="district.DistrictArticleTag",
to="taggit.Tag",
verbose_name="Tags",
),
),
]
# Generated by Django 3.1.1 on 2020-10-07 09:57
import django.db.models.deletion
import wagtailmetadata.models
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("wagtailcore", "0052_pagelogentry"),
("wagtailimages", "0022_uploadedimage"),
("district", "0001_initial"),
]
operations = [
migrations.CreateModel(
name="DistrictArticles",
fields=[
(
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
(
"max_items",
models.IntegerField(
blank=True,
null=True,
verbose_name="Maximalni pocet prvku na strance",
),
),
(
"search_image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailimages.image",
verbose_name="Search image",
),
),
],
options={
"verbose_name": "Aktuality",
},
bases=(
wagtailmetadata.models.MetadataMixin,
"wagtailcore.page",
models.Model,
),
),
]
# Generated by Django 3.1.1 on 2020-10-07 12:10
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("district", "0002_districtarticles"),
]
operations = [
migrations.AddField(
model_name="districthomepage",
name="contact_email",
field=models.EmailField(
blank=True, max_length=250, verbose_name="kontaktni email"
),
),
migrations.AddField(
model_name="districthomepage",
name="contact_newcomers",
field=models.URLField(
blank=True, null=True, verbose_name="URL pro zájemce o členství"
),
),
]
# Generated by Django 3.1.1 on 2020-10-07 12:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("district", "0003_auto_20201007_1410"),
]
operations = [
migrations.AddField(
model_name="districthomepage",
name="donation_page",
field=models.URLField(
blank=True, null=True, verbose_name="URL pro příjem darů"
),
),
]
# Generated by Django 3.1.1 on 2020-10-14 10:09
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("shared", "0008_personpage_search_image"),
("district", "0004_districthomepage_donation_page"),
]
operations = [
migrations.AddField(
model_name="districthomepage",
name="footperson_contact",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="shared.personpage",
verbose_name="Kontaktní osoba",
),
),
]
# Generated by Django 3.1.1 on 2020-10-14 10:30
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("district", "0005_districthomepage_footperson_contact"),
]
operations = [
migrations.RenameField(
model_name="districthomepage",
old_name="footperson_contact",
new_name="footperson_coord",
),
]
# Generated by Django 3.1.1 on 2020-10-14 10:32
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("shared", "0008_personpage_search_image"),
("district", "0006_auto_20201014_1230"),
]
operations = [
migrations.AddField(
model_name="districthomepage",
name="footperson_electman",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="footperson_electman",
to="shared.personpage",
verbose_name="Volební manažer",
),
),
migrations.AddField(
model_name="districthomepage",
name="footperson_media",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="footperson_media",
to="shared.personpage",
verbose_name="Kontakt pro média",
),
),
migrations.AlterField(
model_name="districthomepage",
name="footperson_coord",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="footperson_coord",
to="shared.personpage",
verbose_name="Koordinátor",
),
),
]
# Generated by Django 3.1.1 on 2020-10-14 11:23
import django.db.models.deletion
import wagtail.core.blocks
import wagtail.core.fields
import wagtailmetadata.models
from django.db import migrations, models
import district.models
class Migration(migrations.Migration):
dependencies = [
("wagtailcore", "0052_pagelogentry"),
("wagtailimages", "0022_uploadedimage"),
("district", "0007_auto_20201014_1232"),
]
operations = [
migrations.CreateModel(
name="DistrictContact",
fields=[
(
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
(
"contact_persons",
wagtail.core.fields.StreamField(
[
(
"item",
wagtail.core.blocks.StructBlock(
[
(
"name",
wagtail.core.blocks.CharBlock(label="Role"),
),
(
"person",
wagtail.core.blocks.PageChooserBlock(
label="Osoba",
page_type=["shared.PersonPage"],
),
),
]
),
)
],
blank=True,
verbose_name="Kontakty",
),
),
(
"search_image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailimages.image",
verbose_name="Search image",
),
),
],
options={
"abstract": False,
},
bases=(
district.models.SubpageMixin,
wagtailmetadata.models.MetadataMixin,
"wagtailcore.page",
models.Model,
),
),
]
# Generated by Django 3.1.1 on 2020-10-14 11:43
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("district", "0008_districtcontact"),
]
operations = [
migrations.AlterModelOptions(
name="districtcontact",
options={"verbose_name": "Kontakty"},
),
migrations.AddField(
model_name="districthomepage",
name="contact_phone",
field=models.TextField(
blank=True, max_length=250, verbose_name="kontaktni telefon"
),
),
]
# Generated by Django 3.1.1 on 2020-10-20 03:30
import django.db.models.deletion
import wagtailmetadata.models
from django.db import migrations, models
import shared.models
class Migration(migrations.Migration):
dependencies = [
("wagtailimages", "0022_uploadedimage"),
("wagtailcore", "0052_pagelogentry"),
("district", "0009_auto_20201014_1343"),
]
operations = [
migrations.CreateModel(
name="DistrictTags",
fields=[
(
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
(
"search_image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailimages.image",
verbose_name="Search image",
),
),
],
options={
"verbose_name": "Stránka s tagy",
},
bases=(
shared.models.SharedSubpageMixin,
wagtailmetadata.models.MetadataMixin,
"wagtailcore.page",
models.Model,
),
),
]
import random
from django.core.paginator import Paginator
from django.db import models
from django.utils.translation import gettext_lazy
from modelcluster.contrib.taggit import ClusterTaggableManager
from modelcluster.fields import ParentalKey
from taggit.models import TaggedItemBase
from wagtail.admin.edit_handlers import FieldPanel, MultiFieldPanel, StreamFieldPanel
from wagtail.core import blocks
from wagtail.core.fields import StreamField
from wagtail.core.models import Page
from wagtailmetadata.models import MetadataPageMixin
from shared.models import Article, PeoplePage, SubpageMixin
from shared.models import ArticleMixin, Person, SubpageMixin
class DistrictHomePage(MetadataPageMixin, Page):
......@@ -34,7 +39,7 @@ class DistrictHomePage(MetadataPageMixin, Page):
# Lide uvedeni v paticce
footperson_coord = models.ForeignKey(
"shared.PersonPage",
Person,
verbose_name="Koordinátor",
on_delete=models.PROTECT,
null=True,
......@@ -42,7 +47,7 @@ class DistrictHomePage(MetadataPageMixin, Page):
related_name="footperson_coord",
)
footperson_electman = models.ForeignKey(
"shared.PersonPage",
Person,
verbose_name="Volební manažer",
on_delete=models.PROTECT,
null=True,
......@@ -50,7 +55,7 @@ class DistrictHomePage(MetadataPageMixin, Page):
related_name="footperson_electman",
)
footperson_media = models.ForeignKey(
"shared.PersonPage",
Person,
verbose_name="Kontakt pro média",
on_delete=models.PROTECT,
null=True,
......@@ -101,11 +106,12 @@ class DistrictHomePage(MetadataPageMixin, Page):
]
### RELATIONS
subpage_types = [
"shared.PeoplePage",
"DistrictArticles",
"DistrictContact",
"DistrictTags",
"district.DistrictArticlesPage",
"district.DistrictContactPage",
"district.DistrictPeoplePage",
"district.DistrictTagsPage",
]
### OTHERS
......@@ -118,30 +124,56 @@ class DistrictHomePage(MetadataPageMixin, Page):
@property
def articles(self):
return self.get_descendants().type(Article).live().specific()
return self.get_descendants().type(DistrictArticlePage).live().specific()
@property
def articles_page(self):
return self._first_subpage_of_type(DistrictArticles)
return self._first_subpage_of_type(DistrictArticlesPage)
@property
def people_page(self):
return self._first_subpage_of_type(PeoplePage)
return self._first_subpage_of_type(DistrictPeoplePage)
@property
def contact_page(self):
return self._first_subpage_of_type(DistrictContact)
return self._first_subpage_of_type(DistrictContactPage)
@property
def tags_page(self):
return self._first_subpage_of_type(DistrictTags)
return self._first_subpage_of_type(DistrictTagsPage)
@property
def root_page(self):
return self
class DistrictArticles(SubpageMixin, MetadataPageMixin, Page):
class DistrictArticleTag(TaggedItemBase):
content_object = ParentalKey(
"district.DistrictArticlePage", on_delete=models.CASCADE
)
class DistrictArticlePage(ArticleMixin, SubpageMixin, MetadataPageMixin, Page):
### FIELDS
tags = ClusterTaggableManager(through=DistrictArticleTag, blank=True)
### PANELS
content_panels = ArticleMixin.content_panels + [FieldPanel("tags")]
### RELATIONS
parent_page_types = ["district.DistrictArticlesPage"]
subpage_types = []
### OTHERS
class Meta:
verbose_name = "Aktualita"
class DistrictArticlesPage(SubpageMixin, MetadataPageMixin, Page):
### FIELDS
max_items = models.IntegerField(
......@@ -156,9 +188,10 @@ class DistrictArticles(SubpageMixin, MetadataPageMixin, Page):
settings_panels = []
subpage_types = [
"shared.Article",
]
### RELATIONS
parent_page_types = ["district.DistrictHomePage"]
subpage_types = ["district.DistrictArticlePage"]
### OTHERS
......@@ -174,35 +207,54 @@ class DistrictArticles(SubpageMixin, MetadataPageMixin, Page):
return context
class DistrictContact(SubpageMixin, MetadataPageMixin, Page):
class DistrictContactPage(SubpageMixin, MetadataPageMixin, Page):
class ContactItemBlock(blocks.StructBlock):
name = blocks.CharBlock(label="Role")
person = blocks.PageChooserBlock(
label="Osoba",
page_type=["shared.PersonPage"],
page_type=["district.DistrictPersonPage"],
)
class Meta:
label = "Kontakt"
contact_persons = StreamField(
### FIELDS
contact_people = StreamField(
[("item", ContactItemBlock())],
verbose_name="Kontakty",
blank=True,
)
### PANELS
content_panels = Page.content_panels + [
StreamFieldPanel("contact_persons"),
StreamFieldPanel("contact_people"),
]
### RELATIONS
parent_page_types = ["district.DistrictHomePage"]
subpage_types = []
### OTHERS
class Meta:
verbose_name = "Kontakty"
class DistrictTags(SubpageMixin, MetadataPageMixin, Page):
class DistrictTagsPage(SubpageMixin, MetadataPageMixin, Page):
### PANELS
settings_panels = []
### RELATIONS
parent_page_types = ["district.DistrictHomePage"]
subpage_types = []
### OTHERS
class Meta:
verbose_name = "Stránka s tagy"
......@@ -220,3 +272,63 @@ class DistrictTags(SubpageMixin, MetadataPageMixin, Page):
context["tags"] = tags
return context
class DistrictPersonPage(SubpageMixin, MetadataPageMixin, Page):
### FIELDS
person = models.ForeignKey(Person, on_delete=models.PROTECT, null=True)
perex = models.TextField("Perex osoby", blank=True)
### PANELS
content_panels = Page.content_panels + [
FieldPanel("person"),
FieldPanel("perex"),
]
### RELATIONS
parent_page_types = ["district.DistrictPeoplePage"]
subpage_types = []
### OTHERS
class Meta:
verbose_name = "Detail osoby"
@property
def pageperex(self):
"""Vraci perex Pirata nejblizzsi lokalnimu kontextu.
Zamerne jiny nazev, aby v template bylo na vyber z x.perex, x.person.perex a x.pageperex
"""
return self.perex or self.person.perex
def get_context(self, request):
context = super().get_context(request)
# Na strance detailu cloveka se vpravo zobrazuji 3 dalsi nahodne profily
context["random_people"] = list(
self.get_siblings(inclusive=False).live().specific()
)
random.shuffle(context["random_people"])
context["random_people"] = context["random_people"][:3]
return context
class DistrictPeoplePage(SubpageMixin, MetadataPageMixin, Page):
settings_panels = []
### RELATIONS
parent_page_types = ["district.DistrictHomePage"]
subpage_types = ["district.DistrictPersonPage"]
### OTHERS
class Meta:
verbose_name = "Lidé"
def get_context(self, request):
context = super().get_context(request)
context["people"] = self.get_children().live().specific()
return context
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment