Django rest framework 在Django rest框架中选择带有ModelSerializer的_相关查询集

Django rest framework 在Django rest框架中选择带有ModelSerializer的_相关查询集,django-rest-framework,Django Rest Framework,我正在尝试对DRF序列化程序使用“select_related”queryset方法, 但是这个例子仍然在进行大量的sql查询 如何从select_related method获取相关对象“model_b” class Model_A(models.Model): title = models.CharField(max_length=100) description = models.TextField() model_b = models.ForeignKey(Mod

我正在尝试对DRF序列化程序使用“select_related”queryset方法, 但是这个例子仍然在进行大量的sql查询

如何从select_related method获取相关对象“model_b”

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()


此外,您还可以使用

prefetch\u related将sql查询记录到控制台。它不是更好地应用于多个关系吗?我在foreignkey、多个和推断的其他模型
相关的\u name
字段中使用它。在调试模式下,我打印出所有sql查询。当我使用
prefetch\u related
时,我在其他型号上的所有小人物输入请求都消失了。它只对具有大量ID的相关FK'd模型执行一次查询。
select_related
在您的情况下应该可以正常工作。它们的行为稍有不同:
select_related
将通过join在原始查询中包括模型b,
prefetch\u related
将使用
为模型运行单独的查询,其中。。。在()
中。您的实际代码可能有一些问题,但应该可以像上面所写的那样正常工作。我需要更多的信息。我投票将这个问题作为离题题来结束,因为你还没有包括你得到的SQL查询。根据您编写的代码,您的代码应该可以正常工作。
queryset = Model_A.objects.all().prefetch_related('model_b')