首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表中的比较字段和django-orm中的计算字段

表中的比较字段和django-orm中的计算字段
EN

Stack Overflow用户
提问于 2022-01-04 06:21:39
回答 2查看 134关注 0票数 2

我使用注释计算了一个变量,现在我想将它与现有字段进行比较。那我该怎么做呢?

models.py

代码语言:javascript
复制
 class Book(models.Model):
        name = models.CharField(max_length=50)
        price = models.IntegerField()

查询类似于下面的

代码语言:javascript
复制
aggregate_query = {
     "max-price": (
          aggregate(Avg('price'))
     )
}
input_queryset = Books.objects.annotate(**aggregate_query)

所以现在我想改进查询,过滤那些价格低于最大值并且超过平均值的书籍的数据。

EN

回答 2

Stack Overflow用户

发布于 2022-01-04 07:24:04

代码语言:javascript
复制
from django.db.models import Max

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

你得到了最高的价格。

代码语言:javascript
复制
from django.db.models import Avg
average = Book.objects.all().aggregate(Avg('price'))

现在,你有最高的价格和平均水平。

代码语言:javascript
复制
Book.objects.filter(price__lte = max_price,price__gte=average) 

代码语言:javascript
复制
from django.db.models import Q
Book.objects.filter(Q(price__lte=max_price),Q(price__gte=average))

供参考使用此链接

谢谢!

票数 2
EN

Stack Overflow用户

发布于 2022-01-04 11:19:46

我们不需要检查最大值,因为最高值是最大的,所以所有物品的价格都低于或等于平均水平。

您可以在一个查询中使用以下方法获取平均值:

代码语言:javascript
复制
from django.db.models import Avg

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

然后用以下内容过滤:

代码语言:javascript
复制
Books.objects.filter(price__gte=avg)

如果根据筛选条件确定最大值,则可以使用相同的查询获取bot的最大值和平均值:

代码语言:javascript
复制
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']))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70574744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档