如何根据 Django 中的 2 列获取最新的数据库记录
How to get latest db record based on 2 columns in django
我有一个 table,它结合了外键 F1、F2 和一个用于存储创建的日期时间的列。
如何查询外键组合的最新记录
这些是 table 中的列。
挑战ID、用户ID、创建日期时间、积分
如果challengeID 是CH1,我们有2 个用户U1、U2,那么该组合可能有多个记录。例如。 CH1和U1,有5条记录。其中一个是基于 createdDatetime 的最新记录。
如何使用 Django ORM 从所有用户的特定挑战的最新记录中获取积分值?
类似于:
CH1, U1 - PV1
CH1, U2 - PV2
CH1, U3 - PV3
这是我试过的代码。
def challenge_leaderboard(request):
challenge_id = request.GET.get('challenge_id')
users = RewardPointLog.objects.filter(challenge_user__challenge_id=challenge_id).values_list('user', flat=True)
users_points = {}
for user in users:
points = RewardPointLog.objects.filter(challenge_user__challenge_id=challenge_id, challenge_user__user=user).latest('created_datetime').points
users_points[user.id] = points
return Response(users_points, status=200)
如果您使用的是 PostgreSQL,这会起作用
RewardPointLog.objects.filter(challenge_user__challenge_id=challenge_id).order_by('challenge_user__user', '-created_datetime').distinct('challenge_user__user')
https://docs.djangoproject.com/en/3.2/ref/models/querysets/#distinct
我有一个 table,它结合了外键 F1、F2 和一个用于存储创建的日期时间的列。
如何查询外键组合的最新记录
这些是 table 中的列。
挑战ID、用户ID、创建日期时间、积分
如果challengeID 是CH1,我们有2 个用户U1、U2,那么该组合可能有多个记录。例如。 CH1和U1,有5条记录。其中一个是基于 createdDatetime 的最新记录。
如何使用 Django ORM 从所有用户的特定挑战的最新记录中获取积分值?
类似于:
CH1, U1 - PV1
CH1, U2 - PV2
CH1, U3 - PV3
这是我试过的代码。
def challenge_leaderboard(request):
challenge_id = request.GET.get('challenge_id')
users = RewardPointLog.objects.filter(challenge_user__challenge_id=challenge_id).values_list('user', flat=True)
users_points = {}
for user in users:
points = RewardPointLog.objects.filter(challenge_user__challenge_id=challenge_id, challenge_user__user=user).latest('created_datetime').points
users_points[user.id] = points
return Response(users_points, status=200)
如果您使用的是 PostgreSQL,这会起作用
RewardPointLog.objects.filter(challenge_user__challenge_id=challenge_id).order_by('challenge_user__user', '-created_datetime').distinct('challenge_user__user')
https://docs.djangoproject.com/en/3.2/ref/models/querysets/#distinct