在dict中获取平均值(Django JSONField)

raogr8fs  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(125)

我需要从具有相同SKU编号的订单中提取一些产品。

orders=Order.objects.filter(products__contains=[{"sku":"002-2-1"}])

for e in orders:
    print(e.products)

>>> [{'sku': 002-2-1, 'price': '366.00'}, {'sku': 002-2-1, 'price': '300.00'}] # 2 products in 1 order
>>> [{'sku': 002-2-1, 'price': '400.00'}]  # 1 product in the order

字符串
我需要找到“价格”的平均值
我试着弄到一个有着听写的单子:

a = sum(list(orders.values_list("products", flat=True)), [])

[{'sku': 002-2-1, 'price': '366.00'}, {'sku': 002-2-1, 'price': '300.00'}, {'sku': 002-2-1, 'price': '400.00'}]


如何求出价格的平均值?
第一个月
也许有一个更好的方法来找到它通过F?

rekjcdws

rekjcdws1#

我没有尝试过,但请给予一下:

from django.db.models import Avg

order_qs = Order.objects.filter(products__contains=[{"sku":"002-2-1"}])
print(order_qs.aggregate(Avg("products__price")))

字符串
有趣的资源:
键、索引和路径转换--如何“处理”jsonfield查找
Avg-要聚合查询集以获得平均值的函数
条件聚合-一般的“how-to”如何与Count或提到的Avg等函数聚合

即使你没有要求更好的方式,我想说:“你为什么要用JSONField?在我看来,创建另一个名为Product的模型,并通过ForeignKey链接到Order更有意义。它还支持所有很酷的django特性,比如聚合,注解等等。特别是如果JSONField的方案总是相同的...为什么不建立更进一步的模型呢?

我可以向您保证,使用专用的Product模型,所提供的解决方案将工作。对于JSONField,我不是100%确定-让我知道!

相关问题