Сравните поле в таблице и вычисляемое поле в 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']))