Separate list item read-only serializer.
authorRadek Czajka <rczajka@rczajka.pl>
Fri, 17 Apr 2026 09:28:26 +0000 (11:28 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Fri, 17 Apr 2026 09:28:26 +0000 (11:28 +0200)
src/social/api/serializers.py
src/social/api/views.py

index 3351c07..cbaa3bb 100644 (file)
@@ -2,7 +2,9 @@
 # Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
 #
 from rest_framework import serializers
 # Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
 #
 from rest_framework import serializers
+import bookmarks.api.views
 import bookmarks.models
 import bookmarks.models
+import catalogue.api.serializers
 import catalogue.models
 from social import models
 
 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)
 class UserListSerializerV3(serializers.ModelSerializer):
     client_id = serializers.CharField(write_only=True, required=False)
     timestamp = serializers.IntegerField(required=False)
index 2c23835..6cae38a 100644 (file)
@@ -187,12 +187,17 @@ class ListItemViewV2(APIView):
 @never_cache
 class ListItemListViewV3(ListCreateAPIView):
     permission_classes = [IsAuthenticatedOrReadOnly]
 @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_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())
     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]
 @never_cache
 class ListItemViewV3(RetrieveUpdateDestroyAPIView):
     permission_classes = [IsAuthenticated]
-    serializer_class = serializers.UserListItemSerializer
     lookup_field = 'uuid'
 
     def get_queryset(self):
     lookup_field = 'uuid'
 
     def get_queryset(self):
@@ -218,6 +222,12 @@ class ListItemViewV3(RetrieveUpdateDestroyAPIView):
             list__user=self.request.user
         )
 
             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):
 
 @vary_on_auth
 class ShelfView(ListAPIView):