DRF - CreateAPIView вложенный сериализатор
У меня есть интересный вопрос, и я хочу, чтобы на него смотрели эксперты.
У меня есть следующие модели.
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?