add event organizer models, changes to associations

This commit is contained in:
2024-05-14 23:01:09 +02:00
parent cff4f5555c
commit 3522620cea
8 changed files with 206 additions and 24 deletions

View File

@ -0,0 +1,38 @@
# Generated by Django 5.0.6 on 2024-05-13 02:15
import django.db.models.deletion
import wagtail.blocks
import wagtail.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('associations', '0001_initial'),
('wagtailcore', '0093_uploadedfile'),
]
operations = [
migrations.CreateModel(
name='AssociationIndex',
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')),
('body', wagtail.fields.StreamField([('paragraph', wagtail.blocks.RichTextBlock())])),
],
options={
'abstract': False,
},
bases=('wagtailcore.page',),
),
migrations.RenameField(
model_name='association',
old_name='url',
new_name='websiteUrl',
),
migrations.AlterField(
model_name='association',
name='body',
field=wagtail.fields.StreamField([('paragraph', wagtail.blocks.RichTextBlock())]),
),
]

View File

@ -0,0 +1,19 @@
# Generated by Django 5.0.6 on 2024-05-13 02:21
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('associations', '0002_associationindex_rename_url_association_websiteurl_and_more'),
('wagtailcore', '0093_uploadedfile'),
('wagtailimages', '0026_delete_uploadedimage'),
]
operations = [
migrations.RenameModel(
old_name='Association',
new_name='AssociationPage',
),
]

View File

@ -1,23 +1,37 @@
from django.db import models
from wagtail.models import Page
from wagtail.fields import StreamField
from wagtail import blocks
from wagtail.admin.panels import FieldPanel
from wagtail.images.blocks import ImageChooserBlock
from wagtail.fields import StreamField
from wagtail.models import Page
class Association(Page):
class AssociationIndex(Page):
max_count = 1
subpage_types = ["associations.AssociationPage"]
body = StreamField(
[
("paragraph", blocks.RichTextBlock()),
]
)
content_panels = Page.content_panels + [
FieldPanel("body"),
]
class AssociationPage(Page):
subpage_types = []
parent_page_types = ["associations.AssociationIndex"]
show_in_menus = False
class AssociationType(models.TextChoices):
FORENING = "forening", "Forening"
UTVALG = "utvalg", "Utvalg"
body = StreamField(
[
("heading", blocks.CharBlock(form_classname="title")),
("paragraph", blocks.RichTextBlock()),
("image", ImageChooserBlock()),
]
)
association_type = models.CharField(
@ -30,13 +44,11 @@ class Association(Page):
on_delete=models.SET_NULL,
related_name="+",
)
url = models.URLField()
websiteUrl = models.URLField()
content_panels = Page.content_panels + [
# FieldPanel('author'),
# FieldPanel('date'),
FieldPanel("body"),
FieldPanel("logo"),
FieldPanel("association_type"),
FieldPanel("url"),
FieldPanel("association_type", heading="Type"),
FieldPanel("websiteUrl", heading="Nettside"),
]

View File

@ -3,6 +3,7 @@ from django.urls import reverse
from wagtail import hooks
from wagtail.admin.menu import MenuItem
from associations.models import AssociationIndex
from events.models import EventIndex
@ -14,5 +15,16 @@ def enable_additional_rich_text_features(features):
@hooks.register("register_admin_menu_item")
def register_events_menu_item():
page = EventIndex.objects.first()
events_url = reverse("wagtailadmin_explore", args=(quote(page.pk),))
events_url = "#"
if page:
events_url = reverse("wagtailadmin_explore", args=(quote(page.pk),))
return MenuItem("Arrangementer", events_url, icon_name="date", order=1)
@hooks.register("register_admin_menu_item")
def register_associations_menu_item():
page = AssociationIndex.objects.first()
associations_url = "#"
if page:
associations_url = reverse("wagtailadmin_explore", args=(quote(page.pk),))
return MenuItem("Foreninger", associations_url, icon_name="group", order=2)

View File

@ -0,0 +1,27 @@
# Generated by Django 5.0.6 on 2024-05-13 02:54
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('associations', '0003_rename_association_associationpage'),
('events', '0017_alter_eventcategory_name'),
]
operations = [
migrations.CreateModel(
name='EventOrganizer',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('slug', models.SlugField(help_text='The name of the organizer as it will appear in URLs.', max_length=255, verbose_name='slug')),
('association', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='organizers', to='associations.associationpage')),
],
options={
'abstract': False,
},
),
]

View File

@ -0,0 +1,23 @@
# Generated by Django 5.0.6 on 2024-05-13 03:09
import modelcluster.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('events', '0018_eventorganizer'),
]
operations = [
migrations.AlterModelOptions(
name='eventorganizer',
options={'ordering': ['name'], 'verbose_name': 'Event organizer', 'verbose_name_plural': 'Event organizers'},
),
migrations.AddField(
model_name='eventpage',
name='organizers',
field=modelcluster.fields.ParentalManyToManyField(blank=True, to='events.eventorganizer'),
),
]

View File

@ -12,8 +12,17 @@ from grapple.models import (
GraphQLString,
)
from modelcluster.fields import ParentalKey, ParentalManyToManyField
from modelcluster.models import ClusterableModel
from wagtail import blocks
from wagtail.admin.panels import FieldPanel, FieldRowPanel, HelpPanel, InlinePanel, MultiFieldPanel
from wagtail.admin.panels import (
FieldPanel,
FieldRowPanel,
HelpPanel,
InlinePanel,
MultiFieldPanel,
PageChooserPanel,
TitleFieldPanel,
)
from wagtail.fields import StreamField
from wagtail.images.blocks import ImageChooserBlock
from wagtail.models import Orderable, Page
@ -46,7 +55,7 @@ class EventCategory(models.Model):
default=False, help_text="Skal denne kategorien være mulig å filtrere på i programmet?"
)
panels = [FieldPanel("name"), FieldPanel("slug"), FieldPanel("show_in_filters")]
panels = [TitleFieldPanel("name"), FieldPanel("slug"), FieldPanel("show_in_filters")]
graphql_fields = [
GraphQLString("name", required=True),
@ -63,6 +72,43 @@ class EventCategory(models.Model):
return self.name
@register_snippet
@register_query_field("eventOrganizer", "eventOrganizers")
class EventOrganizer(ClusterableModel):
name = models.CharField(
max_length=100,
null=False,
blank=False,
)
slug = models.SlugField(
verbose_name=_("slug"),
max_length=255,
help_text=_("The name of the organizer as it will appear in URLs."),
)
association = models.ForeignKey(
"associations.AssociationPage",
null=True,
blank=True,
on_delete=models.PROTECT,
related_name="organizers",
)
panels = [
TitleFieldPanel("name"),
FieldPanel("slug"),
PageChooserPanel("association", ["associations.AssociationPage"]),
]
class Meta:
verbose_name = "Event organizer"
verbose_name_plural = "Event organizers"
ordering = ["name"]
def __str__(self):
return self.name
class EventPage(Page):
# no children
subpage_types = []
@ -106,6 +152,11 @@ class EventPage(Page):
blank=True,
)
organizers = ParentalManyToManyField(
"events.EventOrganizer",
blank=True,
)
ticket_url = models.URLField(
blank=True,
max_length=512,
@ -117,12 +168,7 @@ class EventPage(Page):
help_text="Lenke direkte til arrangementet på Facebook",
)
# "event_types": [13],
# "event_organizers": [390, 322],
# "start_time": "2024-05-07T17:00:00+00:00",
# "end_time": "2024-05-07T20:00:00+00:00",
# "venue": "Glassbaren",
# "venue_id": "55063",
price_regular = models.IntegerField(null=True, blank=True)
price_student = models.IntegerField(null=True, blank=True)
@ -145,6 +191,7 @@ class EventPage(Page):
FieldPanel("featured_image"),
FieldPanel("body"),
FieldPanel("categories", widget=forms.CheckboxSelectMultiple),
FieldPanel("organizers", widget=forms.SelectMultiple),
MultiFieldPanel(
heading="Priser og billettkjøp",
children=ticket_panels,
@ -185,6 +232,13 @@ class EventPage(Page):
required=True,
item_required=True,
),
GraphQLCollection(
GraphQLForeignKey,
"organizers",
"events.EventOrganizer",
required=True,
item_required=True,
),
]

View File

@ -1,3 +0,0 @@
from django.shortcuts import render
# Create your views here.