Сравните поле в таблице и вычисляемое поле в django-orm

Я вычислил одну переменную с помощью аннотации и теперь хочу сравнить ее с существующим полем. Как я могу это сделать?

from django.db.models import Max

max_price = Book.objects.all().aggregate(Max('price'))

Вы получаете максимальную цену.

from django.db.models import Avg
average = Book.objects.all().aggregate(Avg('price'))

Теперь у вас есть максимальная цена и средняя.

Book.objects.filter(price__lte = max_price,price__gte=average) 

или

from django.db.models import Q
Book.objects.filter(Q(price__lte=max_price),Q(price__gte=average))

Для справки используйте эту ссылку

Спасибо !!!!

Нам не нужно проверять максимум, так как максимум - это книга с наибольшим значением, поэтому все товары имеют цену, которая меньше или равна средней.

Вы можете получить среднее значение в одном запросе с помощью:

from django.db.models import Avg

avg = Books.objects.aggregate(
    avg=Avg('price')
)['avg']

и затем отфильтровать с помощью:

Books.objects.filter(price__gte=avg)

Если вы определяете максимум на основе условия фильтра, мы можем получить максимальное и среднее значение одним и тем же запросом:

from django.db.models import Avg, Max

aggs = Books.objects.filter(
    # …
).aggregate(
    avg=Avg('price'),
    max=Max('price')
)

Books.objects.filter(price__range=(aggs['avg'], aggs['max']))
Вернуться на верх