11from __future__ import annotations
22
3+ import logging
4+
35from django .db import models
46from django .db .models import (
57 CharField ,
68 DateField ,
79 FloatField ,
810 IntegerField ,
911 JSONField ,
10- Max ,
11- Min ,
1212 URLField ,
1313)
1414from django .utils import timezone
1515from django .utils .text import slugify
16+ from wagtail .admin .forms import WagtailAdminModelForm
1617from wagtail .admin .panels import FieldPanel , FieldRowPanel
1718from wagtail .contrib .routable_page .models import RoutablePageMixin , path
1819from wagtail .fields import RichTextField
1920from wagtail .models import Page
2021from wagtail .snippets .models import register_snippet
22+ from wagtail .snippets .views .snippets import EditView as SnippetEditView
2123from wagtail .snippets .views .snippets import SnippetViewSet
2224
2325MAX_LENGTH = 255
2426
27+ logger = logging .getLogger (__name__ )
28+
2529
2630class EventIndexPage (RoutablePageMixin , Page ):
2731 introduction = models .CharField (max_length = 255 , blank = True )
@@ -52,16 +56,17 @@ def events_for_year(self, request, year=None):
5256
5357 events = self .events ().filter (start_date__year = year )
5458
55- # Get min and max years from database
56- year_range = Event .objects .aggregate (min_year = Min ("year" ), max_year = Max ("year" ))
59+ years = (
60+ Event .objects .values_list ("year" , flat = True ).distinct ().order_by ("-year" )
61+ )
5762
5863 return self .render (
5964 request ,
6065 context_overrides = {
6166 "title" : f"{ year } Events" ,
6267 "events" : events ,
63- "prev_year " : year - 1 if year > year_range [ "min_year" ] else None ,
64- "next_year " : year + 1 if year < year_range [ "max_year" ] else None ,
68+ "current_year " : year ,
69+ "years " : years ,
6570 },
6671 )
6772
@@ -70,13 +75,18 @@ def event_for_key(self, request, key):
7075 """View function for event looked up by event key."""
7176
7277 event = Event .objects .get (key = key )
78+ years = (
79+ Event .objects .values_list ("year" , flat = True ).distinct ().order_by ("-year" )
80+ )
7381
7482 return self .render (
7583 request ,
7684 template = "events/event_page.html" ,
7785 context_overrides = {
7886 "event" : event ,
7987 "week" : event .week + 1 if event .week else None ,
88+ "current_year" : event .year ,
89+ "years" : years ,
8090 },
8191 )
8292
@@ -185,7 +195,6 @@ def save(self, *args, **kwargs):
185195 super ().save (* args , ** kwargs )
186196
187197 class Meta :
188- ordering = ["-start_date" ]
189198 indexes = [
190199 models .Index (fields = ["year" ]),
191200 models .Index (fields = ["start_date" ]),
@@ -195,9 +204,28 @@ def __str__(self):
195204 return self .name
196205
197206
207+ class EventSnippetForm (WagtailAdminModelForm ):
208+ def save (self , commit = True ):
209+ logger .info (f"Saving { self .instance } " )
210+ instance = super ().save (commit = False )
211+ instance .edited_on = timezone .now ().date ()
212+ if commit :
213+ instance .save ()
214+ return instance
215+
216+
217+ class EventEditView (SnippetEditView ):
218+ def save_instance (self ):
219+ instance = super ().save_instance ()
220+ instance .edited_on = timezone .now ().date ()
221+ instance .save ()
222+ return instance
223+
224+
198225@register_snippet
199226class EventViewSet (SnippetViewSet ):
200227 model = Event
228+ edit_view_class = EventEditView
201229 icon = "calendar"
202230 list_display = ["name" , "year" ]
203231 list_filter = ["name" , "year" ]
0 commit comments