add event categories
This commit is contained in:
@ -0,0 +1,30 @@
|
||||
# Generated by Django 5.0.6 on 2024-05-12 23:14
|
||||
|
||||
import modelcluster.fields
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('events', '0013_alter_eventoccurrence_options'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='EventCategory',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=100, null=True)),
|
||||
('slug', models.SlugField(help_text='The name of the category as it will appear in URLs.', max_length=255, verbose_name='slug')),
|
||||
],
|
||||
options={
|
||||
'ordering': ['name'],
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='eventpage',
|
||||
name='categories',
|
||||
field=modelcluster.fields.ParentalManyToManyField(blank=True, to='events.eventcategory'),
|
||||
),
|
||||
]
|
17
dnscms/events/migrations/0015_alter_eventcategory_options.py
Normal file
17
dnscms/events/migrations/0015_alter_eventcategory_options.py
Normal file
@ -0,0 +1,17 @@
|
||||
# Generated by Django 5.0.6 on 2024-05-12 23:16
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('events', '0014_eventcategory_eventpage_categories'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='eventcategory',
|
||||
options={'ordering': ['name'], 'verbose_name': 'Event category', 'verbose_name_plural': 'Event categories'},
|
||||
),
|
||||
]
|
@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.0.6 on 2024-05-12 23:35
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('events', '0015_alter_eventcategory_options'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='eventcategory',
|
||||
name='show_in_filters',
|
||||
field=models.BooleanField(default=False, help_text='Skal denne kategorien være mulig å filtrere på i programmet?'),
|
||||
),
|
||||
]
|
@ -1,5 +1,9 @@
|
||||
from django import forms
|
||||
from django.db import models
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from grapple.helpers import register_query_field
|
||||
from grapple.models import (
|
||||
GraphQLBoolean,
|
||||
GraphQLCollection,
|
||||
GraphQLForeignKey,
|
||||
GraphQLImage,
|
||||
@ -7,12 +11,13 @@ from grapple.models import (
|
||||
GraphQLStreamfield,
|
||||
GraphQLString,
|
||||
)
|
||||
from modelcluster.fields import ParentalKey
|
||||
from modelcluster.fields import ParentalKey, ParentalManyToManyField
|
||||
from wagtail import blocks
|
||||
from wagtail.admin.panels import FieldPanel, FieldRowPanel, HelpPanel, InlinePanel, MultiFieldPanel
|
||||
from wagtail.fields import StreamField
|
||||
from wagtail.images.blocks import ImageChooserBlock
|
||||
from wagtail.models import Orderable, Page
|
||||
from wagtail.snippets.models import register_snippet
|
||||
|
||||
from venues.models import VenuePage
|
||||
|
||||
@ -24,6 +29,39 @@ class EventIndex(Page):
|
||||
graphql_fields = []
|
||||
|
||||
|
||||
@register_snippet
|
||||
@register_query_field("eventCategory", "eventCategories")
|
||||
class EventCategory(models.Model):
|
||||
name = models.CharField(
|
||||
max_length=100,
|
||||
null=True,
|
||||
)
|
||||
slug = models.SlugField(
|
||||
verbose_name=_("slug"),
|
||||
max_length=255,
|
||||
help_text=_("The name of the category as it will appear in URLs."),
|
||||
)
|
||||
show_in_filters = models.BooleanField(
|
||||
default=False, help_text="Skal denne kategorien være mulig å filtrere på i programmet?"
|
||||
)
|
||||
|
||||
panels = [FieldPanel("name"), FieldPanel("slug"), FieldPanel("show_in_filters")]
|
||||
|
||||
graphql_fields = [
|
||||
GraphQLString("name"),
|
||||
GraphQLString("slug"),
|
||||
GraphQLBoolean("show_in_filters"),
|
||||
]
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Event category"
|
||||
verbose_name_plural = "Event categories"
|
||||
ordering = ["name"]
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class EventPage(Page):
|
||||
# no children
|
||||
subpage_types = []
|
||||
@ -62,6 +100,11 @@ class EventPage(Page):
|
||||
]
|
||||
)
|
||||
|
||||
categories = ParentalManyToManyField(
|
||||
"events.EventCategory",
|
||||
blank=True,
|
||||
)
|
||||
|
||||
ticket_url = models.URLField(
|
||||
blank=True,
|
||||
max_length=512,
|
||||
@ -100,6 +143,7 @@ class EventPage(Page):
|
||||
content_panels = Page.content_panels + [
|
||||
FieldPanel("featured_image"),
|
||||
FieldPanel("body"),
|
||||
FieldPanel("categories", widget=forms.CheckboxSelectMultiple),
|
||||
MultiFieldPanel(
|
||||
heading="Priser og billettkjøp",
|
||||
children=ticket_panels,
|
||||
@ -126,6 +170,7 @@ class EventPage(Page):
|
||||
GraphQLInt("price_regular"),
|
||||
GraphQLInt("price_student"),
|
||||
GraphQLInt("price_member"),
|
||||
GraphQLCollection(GraphQLForeignKey, "categories", "events.EventCategory"),
|
||||
GraphQLCollection(GraphQLForeignKey, "occurrences", "events.EventOccurrence"),
|
||||
]
|
||||
|
||||
|
Reference in New Issue
Block a user