重复一个相关查询时,Django,多个数据库命中
Posted
技术标签:
【中文标题】重复一个相关查询时,Django,多个数据库命中【英文标题】:Django, multiple DB hits when repeating one related query 【发布时间】:2021-10-23 03:09:54 【问题描述】:这是模型:
class Category(models.Model):
name = models.TextField()
class Post(models.Model):
category = models.ForeignKey(Category)
现在,我想获取某个类别的帖子:
category = Category.objects.get(id=1)
posts = category.post_set.all()
# this line hit the DB
posts = category.post_set.all()
# and this line hit the DB again!
如何在这些关系中使用缓存的结果。我使用 Django rest-framework,它使 DB 为每个实例多次命中。
【问题讨论】:
【参考方案1】:您可以使用.prefetch_related(…)
[Django-doc]:
category = Category.objects<strong>.prefetch_related('posts')</strong>.get(id=1)
这将加载相关对象,并在 Django/Python 层进行 JOINing。这意味着.all()
调用将使用预取的对象。
【讨论】:
我在 drf 视图中使用category = Category.objects.prefetch_related("post_set")
get_queryset
函数并且它有效!以上是关于重复一个相关查询时,Django,多个数据库命中的主要内容,如果未能解决你的问题,请参考以下文章
Django Admin 搜索查询未命中 Postgres 索引
查询时在Django TimeStampedModel中指定时间间隔[重复]