这是模型:
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命中多次。
您可以使用.prefetch_related(…)
[Django-doc]:
category = Category.objects.prefetch_related('posts').get(id=1)
这将加载相关对象,并在Django/Python层进行连接。这就意味着.all()
调用将使用预取的对象。