from rest_framework import serializers from apps.authors.serializers import AuthorSerializer from apps.books.models import Book from apps.authors.models import Author class BookSerializer(serializers.ModelSerializer): authors = AuthorSerializer(many=True, read_only=True) authors_id = serializers.PrimaryKeyRelatedField( queryset=Author.objects.all(), source="authors", many=True, write_only=True, required=False ) class Meta: model = Book fields = [ "id", "name", "isbn", "authors", "authors_id" ] read_only_fields = ["id"] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) request = self.context.get("request") if request and request.user and request.user.is_authenticated: self.fields["authors_id"].queryset = Author.objects.filter( user=request.user ) else: self.fields["authors_id"].queryset = Author.objects.none() def create(self, validated_data): request = self.context["request"] validated_data["user"] = request.user return super().create(validated_data)