Оптимизация Django Сериализатор - PullRequest
0 голосов
/ 26 марта 2020

У меня есть модель, которая выглядит примерно так:

class Song(models.Model):
    composer = models.ForeignKey('Person')
    performer = models.ForeignKey('Person')
    backup = models.ForeignKey('Person')

class Person(models.Model):
    name = models.CharField(max_length=1000)
    ...

Моя проблема начинается, когда я пытаюсь сериализовать модель Song, например:

class SongSerializer(serializers.ModelSerializer):
    composer = PersonSerializer()
    performer = PersonSerializer()
    backup = PersonSerializer()

    class Meta:
        fields = ('id', 'composer', 'performer', 'backup')

Это приводит к запуску сериализатора 3 запросы, по одному на внешний ключ. Я хочу оптимизировать это в 1 запрос, но я не хочу изменять структуру модели (объединить composer, исполнителя и резервное копирование в ManyToMany с пользовательским порядком, определенным мной). Есть ли способ вручную объединить набор запросов в сериализаторе?

...