2010-03-08 5 views
2

вот моя модельДжанго - запрос - самый последняя запись пользователя


class gameUserTrophyInfo(models.Model): 
    user = models.ForeignKey(userInfo) 
    trophy = models.ForeignKey(gameTrophyInfo) 
    date = models.DateTimeField() 

я хочу запрос, который возвращает мне: для всех пользователей, вернуть самый последний трофей.

Пример:

мой дб:

дата (день - месяц - год)


| user | trophy | date    | 
| 1 |  1 | 10-10-10 10:00:00 | 
| 1 |  2 | 10-10-10 09:00:00 | 
| 2 |  1 | 10-10-10 01:00:00 | 
| 2 |  2 | 11-10-10 01:00:00 | 
| 3 |  10 | 20-10-10 01:00:00 | 

возвращается:


| user | trophy | date    | 
| 1 |  1 | 10-10-10 10:00:00 | 
| 2 |  2 | 11-10-10 01:00:00 | 
| 3 |  10 | 20-10-10 01:00:00 | 

, как я могу это сделать?

спасибо!

ответ

2

Вам нужно два запроса:

users = User.objects.annotate(max_trophy_info_id=Max('gameusertrophyinfo__id')) 
ids = [user.max_trophy_info_id for user in users] 
trophy_infos = gameUserTrophyInfo.objects.filter(id__in = ids) 
+0

с этим вы принимаете во внимание, что большая ID (gameusertrophyinfo__id) равно более позднюю дату, не так ли? Ну, это неправда в моем db, было бы способ применить Макс. Число «дата»? Извините, если я ошибаюсь, интерпретируя ваше решение. спасибо! – fabriciols

+0

похоже, что вы можете заменить его на '' gamusertrophyinfo__date'' за правильный результат. –

+0

с этим, последняя строка не удалась: ТипError: аргумент int() должен быть строкой или числом, а не 'datetime.datetime' любой sugestion? – fabriciols

Смежные вопросы