add event organizer models, changes to associations
This commit is contained in:
27
dnscms/events/migrations/0018_eventorganizer.py
Normal file
27
dnscms/events/migrations/0018_eventorganizer.py
Normal 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,
|
||||
},
|
||||
),
|
||||
]
|
@ -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'),
|
||||
),
|
||||
]
|
@ -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,
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
|
Reference in New Issue
Block a user