dnscms: use wagtail pageviewsets everywhere

This commit is contained in:
2026-05-26 01:41:39 +02:00
parent 38229c97f0
commit 089970a5cd
13 changed files with 266 additions and 145 deletions
+58
View File
@@ -0,0 +1,58 @@
from django.utils.translation import gettext_lazy as _
from wagtail.admin.ui.tables import BooleanColumn, DateColumn
from wagtail.admin.ui.tables.pages import PageStatusColumn, PageTitleColumn
from wagtail.admin.viewsets.pages import PageListingViewSet, PageViewSet
from dnscms.admin import ListingRedirectChooseParentView
from venues.models import VenuePage
class VenueChooseParentView(ListingRedirectChooseParentView):
listing_url_name = "venues:index"
class VenueListingMixin:
"""Shared model + columns for the standalone listing and the page explorer."""
model = VenuePage
icon = "home"
columns = [
PageTitleColumn("title", label=_("Title"), sort_key="title", classname="title"),
BooleanColumn(
"show_as_bookable",
label=_("Rentals page"),
sort_key="show_as_bookable",
width="10%",
),
BooleanColumn(
"show_in_overview",
label=_("Venue overview"),
sort_key="show_in_overview",
width="10%",
),
DateColumn(
"latest_revision_created_at",
label=_("Updated"),
sort_key="latest_revision_created_at",
width="10%",
),
PageStatusColumn("status", label=_("Status"), sort_key="live", width="10%"),
]
class VenueSidebarViewSet(VenueListingMixin, PageListingViewSet):
"""Standalone 'Venues' sidebar entry, reached independently of the page tree."""
choose_parent_view_class = VenueChooseParentView
menu_label = _("Venues")
menu_order = 4
add_to_admin_menu = True
ordering = "title"
class VenueExplorerViewSet(VenueListingMixin, PageViewSet):
"""Applies the same columns when navigating into VenueIndex via the page explorer."""
venue_sidebar_viewset = VenueSidebarViewSet("venues")
venue_explorer_viewset = VenueExplorerViewSet()
@@ -0,0 +1,25 @@
# Generated by Django 6.0.5 on 2026-05-25 23:40
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('venues', '0024_venuepage_show_in_overview_and_more'),
]
operations = [
migrations.AlterModelOptions(
name='venueindex',
options={'verbose_name': 'venue index', 'verbose_name_plural': 'venue indexes'},
),
migrations.AlterModelOptions(
name='venuepage',
options={'verbose_name': 'venue', 'verbose_name_plural': 'venues'},
),
migrations.AlterModelOptions(
name='venuerentalindex',
options={'verbose_name': 'rentals page', 'verbose_name_plural': 'rentals pages'},
),
]
+13
View File
@@ -1,4 +1,5 @@
from django.db import models
from django.utils.translation import gettext_lazy as _
from grapple.helpers import register_singular_query_field
from grapple.models import (
GraphQLBoolean,
@@ -38,6 +39,10 @@ class VenueIndex(HeadlessMixin, Page):
graphql_fields = [GraphQLRichText("lead"), GraphQLStreamfield("body")]
class Meta:
verbose_name = _("venue index")
verbose_name_plural = _("venue indexes")
@register_singular_query_field("venueRentalIndex")
class VenueRentalIndex(HeadlessMixin, Page):
@@ -55,6 +60,10 @@ class VenueRentalIndex(HeadlessMixin, Page):
graphql_fields = [GraphQLRichText("lead"), GraphQLStreamfield("body")]
class Meta:
verbose_name = _("rentals page")
verbose_name_plural = _("rentals pages")
class VenuePage(HeadlessMixin, WPImportedPageMixin, Page):
# no children
@@ -184,3 +193,7 @@ class VenuePage(HeadlessMixin, WPImportedPageMixin, Page):
search_fields = Page.search_fields + [
index.SearchField("body"),
]
class Meta:
verbose_name = _("venue")
verbose_name_plural = _("venues")
+13
View File
@@ -0,0 +1,13 @@
from wagtail import hooks
from .admin import venue_explorer_viewset, venue_sidebar_viewset
@hooks.register("register_admin_viewset")
def register_venue_sidebar_viewset():
return venue_sidebar_viewset
@hooks.register("register_admin_viewset")
def register_venue_explorer_viewset():
return venue_explorer_viewset