为什么 Django 会为相关字段生成额外的查询?

问题描述 投票:0回答:1

我正在使用 drf 和 django-debug-toolbar。

# model
class Item(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField()
    owner = models.ForeignKey(User, on_delete=models.CASCADE)

# serializer
class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = ["id", "title", "description", "owner"]


view
class ItemViewSet(ModelViewSet): queryset = Item.objects.all()
serializer_class = ItemSerializer

我注意到生成了这个额外的查询,但我不知道为什么。

SELECT "marketplace_user"."id",
       "marketplace_user"."password",
       "marketplace_user"."last_login",
       "marketplace_user"."is_superuser",
       "marketplace_user"."first_name",
       "marketplace_user"."last_name",
       "marketplace_user"."is_staff",
       "marketplace_user"."is_active",
       "marketplace_user"."date_joined",
       "marketplace_user"."email"
  FROM "marketplace_user"
 LIMIT 1000

有人可以帮我解决这个问题吗?

django django-rest-framework django-debug-toolbar
1个回答
0
投票

为了防止在 Django 中访问相关字段时进行额外查询,可以使用

prefetch_related
。此方法通过在单个查询中获取相关对象而不是为每个关系单独查询来帮助优化数据库访问。

更多关于如何使用

prefetch_related
的详细信息,可以参考Django官方文档:Django
prefetch_related

© www.soinside.com 2019 - 2024. All rights reserved.