Files
neuf-www/dnscms/venues/models.py

111 lines
3.6 KiB
Python

from django.db import models
from grapple.models import GraphQLBoolean, GraphQLImage, GraphQLStreamfield, GraphQLString
from wagtail import blocks
from wagtail.admin.panels import FieldPanel, FieldRowPanel, MultiFieldPanel
from wagtail.fields import StreamField
from wagtail.images.blocks import ImageChooserBlock
from wagtail.models import Page
class VenueIndex(Page):
# there can only be one venue index page
max_count = 1
subpage_types = ["venues.VenuePage"]
graphql_fields = []
class VenuePage(Page):
# no children
subpage_types = []
parent_page_types = ["venues.VenueIndex"]
# should not be able to be shown in menus
show_in_menus = False
featured_image = models.ForeignKey(
"wagtailimages.Image",
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="+",
help_text=("Bilde av lokalet"),
)
body = StreamField(
[
("paragraph", blocks.RichTextBlock()),
("image", ImageChooserBlock()),
]
)
show_as_bookable = models.BooleanField(
default=True, help_text="Skal lokalet dukke i oversikten over lokaler som leies ut?"
)
floor = models.CharField(
blank=True,
max_length=255,
)
preposition = models.CharField(
blank=True, max_length=255, help_text="Er man i eller på lokalet?"
)
capability_audio = models.CharField(blank=True, max_length=255)
capability_audio_video = models.CharField(blank=True, max_length=255)
capability_bar = models.CharField(blank=True, max_length=255)
capability_lighting = models.CharField(blank=True, max_length=255)
capacity_legal = models.CharField(blank=True, max_length=255)
capacity_standing = models.CharField(blank=True, max_length=255)
capacity_sitting = models.CharField(blank=True, max_length=255)
# "used_for": "Konsert, foredrag, fest, debatt, teater",
capability_panels = [
FieldRowPanel(
children=[
FieldPanel("capability_bar", heading="Bar"),
FieldPanel("capability_audio", heading="Lyd"),
FieldPanel("capability_lighting", heading="Lys"),
FieldPanel("capability_audio_video", heading="A/V"),
],
),
]
capacity_panels = [
FieldRowPanel(
children=[
FieldPanel("capacity_legal", heading="Branntillatelse for"),
FieldPanel("capacity_sitting", heading="Stående"),
FieldPanel("capacity_standing", heading="Sittende"),
],
),
]
content_panels = Page.content_panels + [
FieldPanel("featured_image"),
FieldPanel("body"),
FieldPanel("floor", heading="Etasje"),
FieldPanel("preposition", heading="Preposisjon"),
FieldPanel("show_as_bookable", heading="Vis på utleieside"),
MultiFieldPanel(
heading="Kapabiliteter",
children=capability_panels,
),
MultiFieldPanel(
heading="Kapasitet",
children=capacity_panels,
),
]
graphql_fields = [
GraphQLImage("featured_image"),
GraphQLStreamfield("body"),
GraphQLString("floor"),
GraphQLString("preposition"),
GraphQLBoolean("show_as_bookable"),
GraphQLString("capability_audio"),
GraphQLString("capability_audio_video"),
GraphQLString("capability_bar"),
GraphQLString("capability_lighting"),
GraphQLString("capacity_legal"),
GraphQLString("capacity_standing"),
GraphQLString("capacity_sitting"),
]