Separate list item read-only serializer.
[wolnelektury.git] / src / social / api / serializers.py
index dadf249..cbaa3bb 100644 (file)
@@ -2,6 +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 catalogue.api.serializers
 import catalogue.models
 from social import models
 
 import catalogue.models
 from social import models
 
@@ -14,7 +17,7 @@ class SettingsSerializer(serializers.ModelSerializer):
 
 class UserListBooksField(serializers.Field):
     def to_representation(self, value):
 
 class UserListBooksField(serializers.Field):
     def to_representation(self, value):
-        return value.userlistitem_set.exclude(deleted=True).exclude(book=None).values_list('book__slug', flat=True)
+        return list(value.userlistitem_set.exclude(deleted=True).exclude(book=None).values_list('book__slug', flat=True))
 
     def to_internal_value(self, value):
         return {'books': catalogue.models.Book.objects.filter(slug__in=value)}
 
     def to_internal_value(self, value):
         return {'books': catalogue.models.Book.objects.filter(slug__in=value)}
@@ -75,7 +78,7 @@ class UserListBooksSerializer(UserListSerializerV2):
 
 class UserListItemSerializer(serializers.ModelSerializer):
     client_id = serializers.CharField(write_only=True, required=False)
 
 class UserListItemSerializer(serializers.ModelSerializer):
     client_id = serializers.CharField(write_only=True, required=False)
-    favorites = serializers.BooleanField(required=False)
+    favorites = serializers.BooleanField(read_only=True)
     list_slug = serializers.SlugRelatedField(
         queryset=models.UserList.objects.all(),
         source='list',
     list_slug = serializers.SlugRelatedField(
         queryset=models.UserList.objects.all(),
         source='list',
@@ -87,7 +90,20 @@ class UserListItemSerializer(serializers.ModelSerializer):
         queryset=catalogue.models.Book.objects.all(),
         source='book',
         slug_field='slug',
         queryset=catalogue.models.Book.objects.all(),
         source='book',
         slug_field='slug',
-        required=False
+        required=False,
+        allow_null=True
+    )
+    bookmark = serializers.SlugRelatedField(
+        queryset=bookmarks.models.Bookmark.objects.all(),
+        slug_field='uuid',
+        required=False,
+        allow_null=True
+    )
+    quote = serializers.SlugRelatedField(
+        queryset=bookmarks.models.Quote.objects.all(),
+        slug_field='uuid',
+        required=False,
+        allow_null=True
     )
 
     class Meta:
     )
 
     class Meta:
@@ -114,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)