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() будут использовать предварительно загруженные объекты.

Вернуться на верх