我的Django项目中有一个模型类:
*user_id
*amount
*net_balance
*created_on
我有一个user_ids列表(比方说3)。我需要为每个user_id获取最后一行,然后执行一些操作并为每个用户ID创建一个新行。如何有效地做到这一点。我当然可以进行6笔交易(如果用户ID列表中有3笔交易)。
答案 0 :(得分:0)
如果您想要最新的条目,
ValueError: Can only compare identically-labeled Series objects
如果我正确理解了您的问题,那么您需要获取所有user_id(大概有一个单独的User模型?),然后遍历它们-为每个用户获取最新条目,然后创建新行。
答案 1 :(得分:0)
您需要(至少)对所有感兴趣的记录进行选择(至少),并对每个返回的记录进行1次插入查询。 选择查询可以由ORM功能(聚合)生成,或者,如果您愿意的话,可以使用原始SQL。如果您使用PostgreSQL,则可以将与众不同功能(我推荐)用作:
Model.objects.order_by('user_id', '-created_on').distinct('user_id')
或者您可以将聚合功能用作:
Model.objects.filter(user_id__in=[1,2,3]).values('user_id', 'created_on').annotate(last_row=Max('created_on')).filter(created_on=F('last_row'))
正确答案取决于您的Django版本和数据库。但是Django中有很多不错的功能可以实现这种功能。