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,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.