Address PR review feedback
- Gate e2e-admin superuser behind E2E_MODE env var (security) - Add status and tag filters to ArticleFilterSet - Set default_ordering to -published_date on listing viewset - Add summary to ArticlePage.search_fields for search support - Add 4 new tests for filters, ordering, and search fields Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import django_filters
|
||||
from taggit.models import Tag
|
||||
from wagtail import hooks
|
||||
from wagtail.admin.filters import WagtailFilterSet
|
||||
from wagtail.admin.ui.components import Component
|
||||
@@ -11,6 +12,12 @@ from wagtail.snippets.views.snippets import SnippetViewSet
|
||||
from apps.authors.models import Author
|
||||
from apps.blog.models import ArticlePage, Category, TagMetadata
|
||||
|
||||
STATUS_CHOICES = [
|
||||
("live", "Published"),
|
||||
("draft", "Draft"),
|
||||
("scheduled", "Scheduled"),
|
||||
]
|
||||
|
||||
|
||||
class TagMetadataViewSet(SnippetViewSet):
|
||||
model = TagMetadata
|
||||
@@ -35,6 +42,17 @@ register_snippet(CategoryViewSet)
|
||||
# ── Articles page listing ────────────────────────────────────────────────────
|
||||
|
||||
|
||||
class StatusFilter(django_filters.ChoiceFilter):
|
||||
def filter(self, qs, value): # noqa: A003
|
||||
if value == "live":
|
||||
return qs.filter(live=True)
|
||||
if value == "draft":
|
||||
return qs.filter(live=False, go_live_at__isnull=True)
|
||||
if value == "scheduled":
|
||||
return qs.filter(live=False, go_live_at__isnull=False)
|
||||
return qs
|
||||
|
||||
|
||||
class ArticleFilterSet(WagtailFilterSet):
|
||||
category = django_filters.ModelChoiceFilter(
|
||||
queryset=Category.objects.all(),
|
||||
@@ -44,6 +62,15 @@ class ArticleFilterSet(WagtailFilterSet):
|
||||
queryset=Author.objects.all(),
|
||||
empty_label="All authors",
|
||||
)
|
||||
status = StatusFilter(
|
||||
choices=STATUS_CHOICES,
|
||||
empty_label="All statuses",
|
||||
)
|
||||
tag = django_filters.ModelChoiceFilter(
|
||||
field_name="tags",
|
||||
queryset=Tag.objects.all(),
|
||||
empty_label="All tags",
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = ArticlePage
|
||||
@@ -66,6 +93,7 @@ class ArticlePageListingViewSet(PageListingViewSet):
|
||||
PageStatusColumn("status", sort_key="live"),
|
||||
]
|
||||
filterset_class = ArticleFilterSet
|
||||
default_ordering = "-published_date"
|
||||
|
||||
|
||||
@hooks.register("register_admin_viewset")
|
||||
|
||||
Reference in New Issue
Block a user