Как мне использовать подзапросы Django?

#python #django

#python #django

Вопрос:

Как мне использовать этот подзапрос в Django ORM?

 select id, name, price from book 
where price > (select avg(price) from book);
  

Я попробовал это и получил ошибку.

 Book.objects.filter(price__gt=Subquery(Book.objects.aggregate(Avg('price')))).values('id', 'name', 'price')
  
 AttributeError: 'dict' object has no attribute 'query'
  

Комментарии:

1. docs.djangoproject.com/en/3.1/ref/models/expressions/…

Ответ №1:

Используйте аннотированное выражение вместе с фильтром как,

 from django.db import models

Book.objects 
    .annotate(avg_price=models.Avg('price')) 
    .filter(price__gt=models.F('avg_price'))