Make HistoryView inherit from BaseListingView instead of models.IndexView

along the way, make filtering work again by setting up a history_results view - the search/filter form in slim_header is hard-coded to use index_results_url as the action URL, which caused it to replace the results with a fragment from the index view instead.
pull/11434/head
Matt Westcott 2024-01-05 02:39:42 +00:00
rodzic bd0a3d51b7
commit e3bf15d2ca
3 zmienionych plików z 40 dodań i 6 usunięć

Wyświetl plik

@ -1,7 +1,7 @@
from datetime import timedelta from datetime import timedelta
import django_filters import django_filters
from django.contrib.admin.utils import unquote from django.contrib.admin.utils import quote, unquote
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.urls import reverse from django.urls import reverse
@ -12,8 +12,12 @@ from django.views.generic import TemplateView
from wagtail.admin.filters import DateRangePickerWidget, WagtailFilterSet from wagtail.admin.filters import DateRangePickerWidget, WagtailFilterSet
from wagtail.admin.ui.tables import Column, DateColumn, InlineActionsTable, UserColumn from wagtail.admin.ui.tables import Column, DateColumn, InlineActionsTable, UserColumn
from wagtail.admin.views.generic.base import BaseObjectMixin, WagtailAdminTemplateMixin from wagtail.admin.views.generic.base import (
from wagtail.admin.views.generic.models import IndexView BaseListingView,
BaseObjectMixin,
WagtailAdminTemplateMixin,
)
from wagtail.admin.views.generic.permissions import PermissionCheckedMixin
from wagtail.admin.widgets.button import HeaderButton from wagtail.admin.widgets.button import HeaderButton
from wagtail.log_actions import registry as log_registry from wagtail.log_actions import registry as log_registry
from wagtail.models import ( from wagtail.models import (
@ -54,10 +58,11 @@ class HistoryReportFilterSet(WagtailFilterSet):
self.filters["action"].extra["choices"] = get_actions_for_filter() self.filters["action"].extra["choices"] = get_actions_for_filter()
class HistoryView(IndexView): class HistoryView(PermissionCheckedMixin, BaseListingView):
any_permission_required = ["add", "change", "delete"] any_permission_required = ["add", "change", "delete"]
page_title = gettext_lazy("History") page_title = gettext_lazy("History")
results_template_name = "wagtailadmin/generic/history_results.html" results_template_name = "wagtailadmin/generic/history_results.html"
history_results_url_name = None
header_icon = "history" header_icon = "history"
is_searchable = False is_searchable = False
paginate_by = 20 paginate_by = 20
@ -68,6 +73,7 @@ class HistoryView(IndexView):
UserColumn("user", blank_display_name="system"), UserColumn("user", blank_display_name="system"),
DateColumn("timestamp", label=gettext_lazy("Date")), DateColumn("timestamp", label=gettext_lazy("Date")),
] ]
edit_url_name = None
def setup(self, request, *args, pk, **kwargs): def setup(self, request, *args, pk, **kwargs):
self.pk = pk self.pk = pk
@ -110,6 +116,14 @@ class HistoryView(IndexView):
), ),
] ]
def get_edit_url(self, instance):
if self.edit_url_name:
return reverse(self.edit_url_name, args=(quote(instance.pk),))
def get_history_results_url(self, instance):
if self.history_results_url_name:
return reverse(self.history_results_url_name, args=(quote(instance.pk),))
def get_context_data(self, *args, object_list=None, **kwargs): def get_context_data(self, *args, object_list=None, **kwargs):
context = super().get_context_data(*args, object_list=object_list, **kwargs) context = super().get_context_data(*args, object_list=object_list, **kwargs)
context["object"] = self.object context["object"] = self.object
@ -118,12 +132,15 @@ class HistoryView(IndexView):
"model_name": self.model._meta.verbose_name "model_name": self.model._meta.verbose_name
} }
context["header_action_icon"] = "edit" context["header_action_icon"] = "edit"
context["index_results_url"] = self.get_history_results_url(self.object)
return context return context
def get_base_queryset(self): def get_queryset(self):
return log_registry.get_logs_for_instance(self.object).select_related( queryset = log_registry.get_logs_for_instance(self.object).select_related(
"revision", "user", "user__wagtail_userprofile" "revision", "user", "user__wagtail_userprofile"
) )
queryset = self.filter_queryset(queryset)
return queryset
class WorkflowHistoryView(BaseObjectMixin, WagtailAdminTemplateMixin, TemplateView): class WorkflowHistoryView(BaseObjectMixin, WagtailAdminTemplateMixin, TemplateView):

Wyświetl plik

@ -175,6 +175,7 @@ class ModelViewSet(ViewSet):
def get_history_view_kwargs(self, **kwargs): def get_history_view_kwargs(self, **kwargs):
return { return {
"template_name": self.history_template_name, "template_name": self.history_template_name,
"history_results_url_name": self.get_url_name("history_results"),
"header_icon": "history", "header_icon": "history",
**kwargs, **kwargs,
} }
@ -257,6 +258,12 @@ class ModelViewSet(ViewSet):
self.history_view_class, **self.get_history_view_kwargs() self.history_view_class, **self.get_history_view_kwargs()
) )
@property
def history_results_view(self):
return self.construct_view(
self.history_view_class, **self.get_history_view_kwargs(), results_only=True
)
@property @property
def usage_view(self): def usage_view(self):
return self.construct_view( return self.construct_view(
@ -600,6 +607,11 @@ class ModelViewSet(ViewSet):
path("edit/<str:pk>/", self.edit_view, name="edit"), path("edit/<str:pk>/", self.edit_view, name="edit"),
path("delete/<str:pk>/", self.delete_view, name="delete"), path("delete/<str:pk>/", self.delete_view, name="delete"),
path("history/<str:pk>/", self.history_view, name="history"), path("history/<str:pk>/", self.history_view, name="history"),
path(
"history-results/<str:pk>/",
self.history_results_view,
name="history_results",
),
path("usage/<str:pk>/", self.usage_view, name="usage"), path("usage/<str:pk>/", self.usage_view, name="usage"),
] ]

Wyświetl plik

@ -1141,6 +1141,11 @@ class SnippetViewSet(ModelViewSet):
path("delete/<str:pk>/", self.delete_view, name="delete"), path("delete/<str:pk>/", self.delete_view, name="delete"),
path("usage/<str:pk>/", self.usage_view, name="usage"), path("usage/<str:pk>/", self.usage_view, name="usage"),
path("history/<str:pk>/", self.history_view, name="history"), path("history/<str:pk>/", self.history_view, name="history"),
path(
"history-results/<str:pk>/",
self.history_results_view,
name="history_results",
),
] ]
if self.inspect_view_enabled: if self.inspect_view_enabled: