Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Django按一个字段分组,按另一个字段获取最大值_Python 3.x_Django - Fatal编程技术网

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,这个模式如何调用?