From: Radek Czajka Date: Fri, 17 Apr 2026 09:28:26 +0000 (+0200) Subject: Separate list item read-only serializer. X-Git-Url: https://git.mdrn.pl/wolnelektury.git/commitdiff_plain/162b0b772d94f0f6b12a63ea2778c1cc0c104027 Separate list item read-only serializer. --- diff --git a/src/social/api/serializers.py b/src/social/api/serializers.py index 3351c0720..cbaa3bb6a 100644 --- a/src/social/api/serializers.py +++ b/src/social/api/serializers.py @@ -2,7 +2,9 @@ # Copyright © Fundacja Wolne Lektury. See NOTICE for more information. # from rest_framework import serializers +import bookmarks.api.views import bookmarks.models +import catalogue.api.serializers import catalogue.models from social import models @@ -128,6 +130,28 @@ class UserListItemSerializer(serializers.ModelSerializer): } +class UserListItemReadSerializer(UserListItemSerializer): + book = catalogue.api.serializers.BookSerializer2() + bookmark = bookmarks.api.views.BookmarkSerializer() + class Meta: + model = models.UserListItem + fields = [ + 'client_id', + 'uuid', + 'order', + 'list_slug', + 'timestamp', + 'favorites', + 'deleted', + + 'book', + 'fragment', + 'quote', + 'bookmark', + 'note', + ] + + class UserListSerializerV3(serializers.ModelSerializer): client_id = serializers.CharField(write_only=True, required=False) timestamp = serializers.IntegerField(required=False) diff --git a/src/social/api/views.py b/src/social/api/views.py index 2c2383591..6cae38ae4 100644 --- a/src/social/api/views.py +++ b/src/social/api/views.py @@ -187,12 +187,17 @@ class ListItemViewV2(APIView): @never_cache class ListItemListViewV3(ListCreateAPIView): permission_classes = [IsAuthenticatedOrReadOnly] - serializer_class = serializers.UserListItemSerializer def get_queryset(self): lst = get_userlist(self.kwargs['slug'], self.request) return lst.userlistitem_set.all().order_by('order') + def get_serializer_class(self): + if self.request.method == 'GET': + return serializers.UserListItemReadSerializer + else: + return serializers.UserListItemSerializer + def get_serializer(self, *args, **kwargs): serializer_class = self.get_serializer_class() kwargs.setdefault('context', self.get_serializer_context()) @@ -210,7 +215,6 @@ class ListItemListViewV3(ListCreateAPIView): @never_cache class ListItemViewV3(RetrieveUpdateDestroyAPIView): permission_classes = [IsAuthenticated] - serializer_class = serializers.UserListItemSerializer lookup_field = 'uuid' def get_queryset(self): @@ -218,6 +222,12 @@ class ListItemViewV3(RetrieveUpdateDestroyAPIView): list__user=self.request.user ) + def get_serializer_class(self): + if self.request.method == 'GET': + return serializers.UserListItemReadSerializer + else: + return serializers.UserListItemSerializer + @vary_on_auth class ShelfView(ListAPIView):