Обновление 2 :
(После прочтения комментариев ОП) я предлагаю добавить новую модель для отслеживания последней подачи. Назовите это LatestSubmission
.
class LatestSubmission(models.Model):
user = models.ForeignKey(User)
problem = models.ForeignKey(Problem)
submission = models.ForeignKey(Submission)
Вы можете затем либо
- переопределить
Submission.save()
для создания / обновления записи в LatestSubmission
каждый раз, когда пользователь публикует новое решение для проблемы
- присоединяет функцию, которая делает то же самое, к подходящему сигналу .
, так что LatestSubmission
будет содержать по одной строке для каждой комбинации проблема-пользователь-отправка, указывающей на последнюю отправку для проблемы каждым пользователем. Если у вас есть это, вы можете запустить один запрос:
LatestSubmission.objects.all().order_by('problem')
Обновление :
Поскольку OP опубликовал пример кода, решение теперь можно изменить следующим образом:
for user in User.objects.all(): # Get all users
user.submission_set.latest('time') # Pick the latest submission based on time.
Оригинальный ответ
В отсутствие каких-либо критериев, основанных на дате / времени, для принятия решения, какой из них «старше» или «новее», вы можете использовать первичный ключ (id
) Submission
, чтобы «пренебречь старыми».
for user in User.objects.all(): # Get all users
user.submission_set.latest('id') # Pick the latest submission by each user.