add event organizer models, changes to associations
This commit is contained in:
@ -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,
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user