fields = ['notifications']
-class UserListItemsField(serializers.Field):
+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)}
-class UserListSerializer(serializers.ModelSerializer):
+class UserListSerializerV2(serializers.ModelSerializer):
client_id = serializers.CharField(write_only=True, required=False)
- books = UserListItemsField(source='*', required=False)
+ books = UserListBooksField(source='*', required=False)
timestamp = serializers.IntegerField(required=False)
class Meta:
return instance
-class UserListBooksSerializer(UserListSerializer):
+class UserListBooksSerializer(UserListSerializerV2):
class Meta:
model = models.UserList
fields = ['books']
}
+class UserListSerializerV3(serializers.ModelSerializer):
+ client_id = serializers.CharField(write_only=True, required=False)
+ timestamp = serializers.IntegerField(required=False)
+
+ class Meta:
+ model = models.UserList
+ fields = [
+ 'timestamp',
+ 'client_id',
+ 'name',
+ 'slug',
+ 'favorites',
+ 'deleted',
+ ]
+ read_only_fields = [
+ 'favorites',
+ 'slug',
+ ]
+ extra_kwargs = {
+ 'slug': {
+ 'required': False
+ }
+ }
+
+ def create(self, validated_data):
+ instance = models.UserList.get_by_name(
+ validated_data['user'],
+ validated_data['name'],
+ create=True
+ )
+ return instance
+
+
class ProgressSerializer(serializers.ModelSerializer):
book = serializers.HyperlinkedRelatedField(
read_only=True,