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

@ -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,
),
]