我正在使用 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 中访问相关字段时进行额外查询,可以使用
prefetch_related
。此方法通过在单个查询中获取相关对象而不是为每个关系单独查询来帮助优化数据库访问。
更多关于如何使用
prefetch_related
的详细信息,可以参考Django官方文档:Django prefetch_related
。