Python 3.x Django按一个字段分组,按另一个字段获取最大值
我有这个模型:Python 3.x Django按一个字段分组,按另一个字段获取最大值,python-3.x,django,Python 3.x,Django,我有这个模型: class Order(models.Model): symbol = models.CharField(max_length=30, default='') b_id = models.IntegerField(null = True, blank = True, unique=True) 我使用它来存储从api获得的来自exchange的交易订单 我通常收到的订单如下所示: #order1 (symbol='btc/usdt', b_id =1) #ord
class Order(models.Model):
symbol = models.CharField(max_length=30, default='')
b_id = models.IntegerField(null = True, blank = True, unique=True)
我使用它来存储从api获得的来自exchange的交易订单
我通常收到的订单如下所示:
#order1 (symbol='btc/usdt', b_id =1)
#order2 (symbol ='btc/usdt, b_id=2)
#order3 (symbol = 'eth/usdt', b_id=8)
#order4 (symbol = 'eth/usdt', b_id=9)
#b_id is unique id I get from exchange
要获得订单的正确历史记录,我需要获得按符号分组的最大b_id的订单
所以我需要一个函数,它将返回如下对象:
result={'btc/usdt':2'eth/usdt':9}
现在我只使用简单循环:
symbols=['btc/usdt', 'eth/usdt','link/usdt']
for symbol in symbols:
last_order = Order.objects.filter(symbol=symbol).latest('b_id')
since = last_order.b_id
sinces[symbol]=since
但它经常查询数据库。有没有办法减少数据库调用
UPD:看,我有订单列表,它们按符号分组,例如我有五个BTC/USDT
订单和六个ETH\BTC
订单。
每个订单都有唯一的b_id
字段
要从API获得订单的正确历史记录,我只需要知道具有最新(或最大)b_id的订单
例如,如果我有两份订单“BTC\USDT”`
order1 (symbol='btc/usdt', b_id =1)
order2 (symbol ='btc/usdt, b_id=2)
我只需要选择一个具有
b_id=2
的符号,以及与其他符号相同的cast values_列表,以便按预期进行记录
从django.db.models导入最大值
qs=Order.objects.values('symbol')。注释(max_id=max('b_id'))\
.values\u list('symbol','max\u id')
结果={k:v代表k,v代表qs}
打印(结果)
这对我来说没有意义我需要获得按符号分组的最大b_id的订单
你能解释得更清楚吗?@VishalSingh看到UpdateSems是我需要的,我会检查这个解决方案结果={k:v代表k,v代表qs}-这意味着什么?它从queryset转换为list,这个模式如何调用?