Избегайте различных представлений одного и того же сериализатора. Django Rest Framework
Представьте, что у меня есть модель, которая выглядит следующим образом:
class Author(models.Model):
    books = models.ManyToManyField()
и сериализатор для объектов Book:
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ('title',)
    def to_representation(self, obj):
        return obj.title
Я использую его для представления объектов Book для сущностей Author. У меня есть два разных сериализатора для GET и POST запросов, но поле books абсолютно одинаковое.
class AuthorSerializer(serializers.ModelSerializer):
    books = BookSerializer(read_only=True, many=True)
    class Meta:
        model = Author
        fields = ('books', ...)
Моя проблема в том, что один AuthorSerializer (GET запросы) возвращает данные корректно:
books = ['...', '...']
в то время как тот, который предназначен для POST-запросов, возвращает его с идентификаторами.
books = [{'id': 1, 'title': '...'}]
Что я упускаю? Спасибо.
попробуйте добавить следующую строку в мета-класс BookSerializer.
exclude=('id',)
                     Я думаю, что ваш сериализатор Book неоднозначен, потому что он имеет to_representation метод и список объявленных полей для сериализации, и эти два противоречат друг другу. Использование метода вместо метода может решить эту проблему:
class AuthorSerializer(serializers.ModelSerializer):
    books = serializers.SerializerMethodField(read_only=True)
    def get_books(self, obj: Author):
        return obj.books.all().values_list('title', flat=True)
    class Meta:
        model = Author
        fields = ('books', ...)