DRF - CreateAPIView вложенный сериализатор - PullRequest
0 голосов
/ 23 февраля 2019

У меня интересный вопрос, и я хочу получить экспертные оценки.

У меня есть следующие модели.

class A(models.Model):
    b = ForeignKey(B)
    c = ForeignKey(B)
    d = ForeignKey(B)

class B(models.Model):
    pass

class C(models.Model):
    pass

class D(models.Model):
    pass

Ниже приведены мои сериализаторы:

class ASearializer(serializers.Serializer):
    b = BSearializer()
    c = CSearializer()
    d = DSearializer()

    class Meta:
        model = A
        fields = ('b', 'c', 'd')

    def create(self, data):
        # I create the instance of A, B, C and D.
        return instance_of_A

class BSearializer(serializers.Serializer):
    class Meta:
        model = B
        fields = '__all__'

class CSearializer(serializers.Serializer):
    class Meta:
        model = C
        fields = '__all__'

class DSearializer(serializers.Serializer):
    class Meta:
        model = D
        fields = '__all__'

Мои взгляды: -

class View(CreateAPIView):
    serializer_class = Aserializer
    queryset = A.object.all().select_related('b').select_related('c').select_related('d')

Все работает как положено.Запрос и ответ работают правильно.

Однако выполненные запросы не соответствуют ожиданиям.При возврате данных DRF запускает 3 дополнительных запроса для фильтрации B, C и D, игнорируя тем самым набор запросов.

1) Как заставить DRF запускать один запрос JOIN?

...