sort data in metadata

This commit is contained in:
Corban-Lee Jones 2024-07-17 17:11:43 +01:00
parent 87e0236ec1
commit f0a4c7d8c0
2 changed files with 19 additions and 8 deletions

View File

@ -5,6 +5,14 @@ from rest_framework.request import clone_request
class ExpandedMetadata(SimpleMetadata): class ExpandedMetadata(SimpleMetadata):
def determine_metadata(self, request, view):
metadata = super().determine_metadata(request, view)
if hasattr(view, "ordering_fields"):
metadata["sort"] = view.ordering_fields
return metadata
def determine_actions(self, request, view): def determine_actions(self, request, view):
""" """
For generic class based views we return information about For generic class based views we return information about

View File

@ -13,6 +13,7 @@ from rest_framework.parsers import MultiPartParser, FormParser
from apps.home.models import SubChannel, Filter, Subscription, SavedGuilds, TrackedContent, ArticleMutator from apps.home.models import SubChannel, Filter, Subscription, SavedGuilds, TrackedContent, ArticleMutator
from apps.authentication.models import DiscordUser from apps.authentication.models import DiscordUser
from .metadata import ExpandedMetadata
from .serializers import ( from .serializers import (
SubChannelSerializer, SubChannelSerializer,
FilterSerializer, FilterSerializer,
@ -108,10 +109,11 @@ class Filter_ListView(generics.ListCreateAPIView):
pagination_class = DefaultPagination pagination_class = DefaultPagination
serializer_class = FilterSerializer serializer_class = FilterSerializer
metadata_class = ExpandedMetadata
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter] filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
filterset_fields = ["id", "name", "matching_algorithm", "match", "is_insensitive", "is_whitelist", "guild_id"] filterset_fields = ["id", "name", "matching_algorithm", "match", "is_insensitive", "is_whitelist", "guild_id"]
search_fields = ["name", "keywords", "regex"] search_fields = ["name", "match"]
def get_queryset(self): def get_queryset(self):
if self.request.user.is_superuser: if self.request.user.is_superuser:
@ -183,16 +185,15 @@ class Subscription_ListView(generics.ListCreateAPIView):
permission_classes = [permissions.IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
pagination_class = DefaultPagination pagination_class = DefaultPagination
# serializer_class = SubscriptionSerializer metadata_class = ExpandedMetadata
# queryset = Subscription.objects.all().order_by("-creation_datetime")
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter] filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
filterset_fields = [ filterset_fields = [
"id", "name", "url", "guild_id", "creation_datetime", "extra_notes", "filters", "id", "name", "url", "guild_id", "creation_datetime", "extra_notes", "filters",
"article_title_mutators", "article_desc_mutators", "embed_colour", "published_threshold", "active" "article_title_mutators", "article_desc_mutators", "embed_colour", "published_threshold", "active"
] ]
search_fields = ["name", "extra_notes"] search_fields = ["name", "url", "extra_notes"]
ordering_fields = ["creation_datetime", "guild_id"] ordering_fields = ["creation_datetime", "channels_count"]
read_serializer_class = SubscriptionSerializer_GET read_serializer_class = SubscriptionSerializer_GET
write_serializer_class = SubscriptionSerializer_POST write_serializer_class = SubscriptionSerializer_POST
@ -243,9 +244,6 @@ class Subscription_DetailView(generics.RetrieveUpdateDestroyAPIView):
permission_classes = [permissions.IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
parser_classes = [MultiPartParser, FormParser] parser_classes = [MultiPartParser, FormParser]
# serializer_class = SubscriptionSerializer
# queryset = Subscription.objects.all().order_by("-creation_datetime")
serializer_class = SubscriptionSerializer_POST serializer_class = SubscriptionSerializer_POST
def get_queryset(self): def get_queryset(self):
@ -317,6 +315,7 @@ class SavedGuild_ListView(generics.ListCreateAPIView):
pagination_class = None pagination_class = None
serializer_class = SavedGuildSerializer serializer_class = SavedGuildSerializer
metadata_class = ExpandedMetadata
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter] filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
filterset_fields = ["id", "guild_id", "name", "icon", "added_by", "permissions", "owner"] filterset_fields = ["id", "guild_id", "name", "icon", "added_by", "permissions", "owner"]
@ -400,10 +399,13 @@ class TrackedContent_ListView(generics.ListCreateAPIView):
permission_classes = [permissions.IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
pagination_class = DefaultPagination pagination_class = DefaultPagination
metadata_class = ExpandedMetadata
queryset = TrackedContent.objects.all().order_by("-creation_datetime") queryset = TrackedContent.objects.all().order_by("-creation_datetime")
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter] filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
filterset_fields = ["guid", "title", "url", "subscription", "subscription__guild_id", "channel_id", "blocked", "creation_datetime"] filterset_fields = ["guid", "title", "url", "subscription", "subscription__guild_id", "channel_id", "blocked", "creation_datetime"]
search_fields = ["guid", "title", "url", "subscription__name", "subscription__url"]
ordering_fields = ["creation_datetime"]
read_serializer_class = TrackedContentSerializer_GET read_serializer_class = TrackedContentSerializer_GET
write_serializer_class = TrackedContentSerializer_POST write_serializer_class = TrackedContentSerializer_POST
@ -457,6 +459,7 @@ class ArticleMutator_ListView(generics.ListCreateAPIView):
authentication_classes = [SessionAuthentication, TokenAuthentication] authentication_classes = [SessionAuthentication, TokenAuthentication]
permission_classes = [permissions.IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
metadata_class = ExpandedMetadata
queryset = ArticleMutator.objects.all().order_by("id") queryset = ArticleMutator.objects.all().order_by("id")
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter] filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]