我使用注释计算了一个变量,现在我想将它与现有字段进行比较。那我该怎么做呢?
models.py
class Book(models.Model):
name = models.CharField(max_length=50)
price = models.IntegerField()查询类似于下面的
aggregate_query = {
"max-price": (
aggregate(Avg('price'))
)
}
input_queryset = Books.objects.annotate(**aggregate_query)所以现在我想改进查询,过滤那些价格低于最大值并且超过平均值的书籍的数据。
发布于 2022-01-04 07:24:04
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))谢谢!
发布于 2022-01-04 11:19:46
我们不需要检查最大值,因为最高值是最大的,所以所有物品的价格都低于或等于平均水平。
您可以在一个查询中使用以下方法获取平均值:
from django.db.models import Avg
avg = Books.objects.aggregate(
avg=Avg('price')
)['avg']然后用以下内容过滤:
Books.objects.filter(price__gte=avg)如果根据筛选条件确定最大值,则可以使用相同的查询获取bot的最大值和平均值:
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']))https://stackoverflow.com/questions/70574744
复制相似问题