from rest_framework import serializers from apps.shelves.serializers import ShelfSerializer from apps.authors.serializers import AuthorSerializer from apps.books.models import Book from apps.shelves.models import Shelf from apps.authors.models import Author class BookSerializer(serializers.ModelSerializer): shelf = ShelfSerializer(read_only=True) shelf_id = serializers.PrimaryKeyRelatedField( queryset=Shelf.objects.all(), source="shelf", write_only=True ) authors = AuthorSerializer(many=True, read_only=True) authors_id = serializers.PrimaryKeyRelatedField( queryset=Author.objects.all(), source="authors", many=True, allow_null=True, write_only=True ) class Meta: model = Book fields = [ "id", "name", "isbn", "shelf", "shelf_id", "authors", "authors_id" ] read_only_fields = ["id"] def __init__(self, instance=None, data=..., **kwargs): super().__init__(instance, data, **kwargs) request = self.context.get("request") if request and request.user: self.fields["shelf_id"].queryset = Shelf.objects.filter( user=request.user ) self.fields["authors_id"].queryset = Author.objects.filter( user=request.user ) def create(self, validated_data): request = self.context["request"] validated_data["user"] = request.user return super().create(validated_data)