class Meta:
model = Tag
- fields = ['name', 'url', 'sort_key', 'description']
+ fields = [
+ 'name', 'url', 'sort_key',
+ 'description',
+ 'description_pl',
+ 'plural', 'genre_epoch_specific',
+ 'adjective_feminine_singular', 'adjective_nonmasculine_plural',
+ 'genitive', 'collective_noun',
+ ]
+ write_only_fields = [
+ 'description_pl',
+ 'plural', 'genre_epoch_specific',
+ 'adjective_feminine_singular', 'adjective_nonmasculine_plural',
+ 'genitive', 'collective_noun',
+ ]
+
+
+class TranslatorSerializer(serializers.Serializer):
+ name = serializers.CharField(source='*')
class BookSerializer(LegacyMixin, serializers.ModelSerializer):
url = AbsoluteURLField()
authors = TagSerializer(many=True)
+ translators = TranslatorSerializer(many=True)
epochs = TagSerializer(many=True)
genres = TagSerializer(many=True)
kinds = TagSerializer(many=True)
class Meta:
model = Book
fields = [
- 'title', 'url',
- 'epochs', 'genres', 'kinds', 'authors',
+ 'title', 'url', 'language',
+ 'epochs', 'genres', 'kinds', 'authors', 'translators',
'fragment_data', 'children', 'parent', 'preview',
'epub', 'mobi', 'pdf', 'html', 'txt', 'fb2', 'xml', 'media', 'audio_length',
- 'cover_color', 'simple_cover', 'cover_thumb', 'cover', 'simple_thumb'
+ 'cover_color', 'simple_cover', 'cover_thumb', 'cover', 'simple_thumb',
+ 'isbn_pdf', 'isbn_epub', 'isbn_mobi',
]
legacy_non_null_fields = ['html', 'txt', 'fb2', 'epub', 'mobi', 'pdf',
'cover', 'simple_cover', 'cover_thumb', 'simple_thumb']
class CollectionSerializer(serializers.ModelSerializer):
- books = BookSerializer(many=True, source='get_books')
+ books = BookSerializer(many=True, source='get_books', read_only=True)
+ authors = TagSerializer(many=True, read_only=True)
+ book_slugs = serializers.CharField(write_only=True, required=False)
+ author_slugs = serializers.CharField(write_only=True, required=False)
url = AbsoluteURLField()
class Meta:
model = Collection
- fields = ['url', 'books', 'description', 'title']
+ fields = [
+ 'url', 'books', 'description', 'title',
+ 'book_slugs', 'authors', 'author_slugs'
+ ]
+
+ def update(self, instance, validated_data):
+ instance = super().update(instance, validated_data)
+ author_slugs = validated_data.get('author_slugs', '').strip().split()
+ if author_slugs:
+ authors = Tag.objects.filter(
+ category='author',
+ slug__in=author_slugs
+ )
+ else:
+ authors = []
+ instance.authors.set(authors)
+ return instance
class FragmentSerializer(serializers.ModelSerializer):