Как получить последнюю запись в базе данных на основе 2 столбцов в django

У меня есть таблица, которая имеет комбинацию внешних ключей F1, F2 и столбец для хранения созданной даты.

Как я могу запросить последние записи для комбинаций внешних ключей.

Вот столбцы в таблице.

ChallengeID, UserID, createdDatetime, points

Если идентификатор задачи CH1 и у нас есть 2 пользователя U1, U2, и может быть несколько записей для этой комбинации. например. CH1 и U1, есть 5 записей. и из них одна - последняя запись, основанная на времени созданияDatetime.

Как получить значение очков из последних записей для всех пользователей для определенной задачи, используя 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

Вернуться на верх