-class UserListItemsField(serializers.Field):
- def to_representation(self, value):
- return 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):
- client_id = serializers.CharField(write_only=True, required=False)
- books = UserListItemsField(source='*', required=False)
- timestamp = serializers.IntegerField(required=False)
-
- class Meta:
- model = models.UserList
- fields = [
- 'timestamp',
- 'client_id',
- 'name',
- 'slug',
- 'favorites',
- 'deleted',
- 'books',
- ]
- read_only_fields = ['favorites']
- extra_kwargs = {
- 'slug': {
- 'required': False
- }
- }
-
- def create(self, validated_data):
- instance = models.UserList.get_by_name(
- validated_data['user'],
- validated_data['name'],
- create=True
- )
- instance.userlistitem_set.all().delete()
- for book in validated_data['books']:
- instance.append(book)
- return instance
-
- def update(self, instance, validated_data):
- instance.userlistitem_set.all().delete()
- for book in validated_data['books']:
- instance.append(instance)
- return instance
-
-class UserListBooksSerializer(UserListSerializer):
- class Meta:
- model = models.UserList
- fields = ['books']
-
-
-class UserListItemSerializer(serializers.ModelSerializer):
- client_id = serializers.CharField(write_only=True, required=False)
- favorites = serializers.BooleanField(required=False)
- list_slug = serializers.SlugRelatedField(
- queryset=models.UserList.objects.all(),
- source='list',
- slug_field='slug',
- required=False,
- )
- timestamp = serializers.IntegerField(required=False)
- book_slug = serializers.SlugRelatedField(
- queryset=Book.objects.all(),
- source='book',
- slug_field='slug',
- required=False
- )
-
- class Meta:
- model = models.UserListItem
- fields = [
- 'client_id',
- 'uuid',
- 'order',
- 'list_slug',
- 'timestamp',
- 'favorites',
- 'deleted',
-
- 'book_slug',
- 'fragment',
- 'quote',
- 'bookmark',
- 'note',
- ]
- extra_kwargs = {
- 'order': {
- 'required': False
- }
- }
-
-