Django, несколько обращений к БД при повторении одного связанного запроса
Это модель:
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 hit несколько раз для каждого экземпляра.
Вы можете работать с .prefetch_related(…)
[Django-doc]:
category = Category.objects.prefetch_related('posts').get(id=1)
Это загрузит связанные объекты и выполнит объединение на уровне Django/Python. Таким образом, это означает, что вызовы .all()
будут использовать предварительно загруженные объекты.