在Django rest框架中使用ModelSerializer的select_related queryset

时间:2015-06-22 17:57:07

标签: django-rest-framework

我试图使用" select_related"使用DRF序列化程序的queryset方法, 但是这个例子仍在进行大量的SQL查询。

我如何获得相关对象" model_b"来自select_related方法?

class Model_A(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    model_b = models.ForeignKey(Model_B, null=True, blank=True)

class Model_B(models.Model):
    title = models.CharField(max_length=100)


class Model_A_Serializer(serializers.ModelSerializer):
    model_b = Model_B_Serializer(source="model_b")
    class Meta:
        model = Model_A
        fields = ('title', 'model_b')

class Model_B_Serializer(serializers.ModelSerializer):
    class Meta:
        model = Model_B


class Model_A_View(viewsets.ModelViewSet):
    serializer_class = Model_A_Serializer
    queryset = Model_A.objects.select_related('model_b').all()

1 个答案:

答案 0 :(得分:2)

Use prefetch_related instead.

queryset = Model_A.objects.all().prefetch_related('model_b')

此外,您可以使用this answer

将sql查询记录到控制台