On Fri, Mar 4, 2011 at 4:06 PM, reddish <sid...@jigsaw.nl> wrote:
> Hi,
>
> I have trouble getting a QuerySet to do what I want. I need to select
> the last 10 items of a certain model (ordered by timestamp; so the
> "most recent" 10 items), and when I iterate over them during template
> processing I want the earliest item (with the oldest timestamp) to
> come first.
>
> I've tried to achieve this using various combinations of slicing,
> reverse(), and ordering on 'timestamp' vs '-timestamp', but I can't
> get it to work.
>
> How can this be done?
>
> Regards, Sidney
>

Unless I'm being dense, you cannot represent this as a single SQL
query, so logically you cannot represent this as a QuerySet. Dropping
to a little python, it is trivial:

>>> q=UsageLogEntry.objects.all().order_by('-time')[:10]
>>> items = list(q)
>>> items.reverse()
>>> for l in items: print l.time
...
2011-03-02 14:18:16
2011-03-02 14:18:23
2011-03-02 14:50:15
2011-03-02 15:24:16
2011-03-02 15:24:16
2011-03-02 15:24:23
2011-03-03 11:23:42
2011-03-03 11:28:49
2011-03-03 11:28:52
2011-03-04 12:30:15

If you absolutely must have a queryset, you can fudge it with two queries:


>>> q=UsageLogEntry.objects.all().order_by('-time')[:10]
>>> q_ids = list(q.values_list('id', flat=True))
>>> items = UsageLogEntry.objects.filter(id__in=q_ids).order_by('time')
>>> for l in items: print l.time
...
2011-03-02 14:18:16
2011-03-02 14:18:23
2011-03-02 14:50:15
2011-03-02 15:24:16
2011-03-02 15:24:16
2011-03-02 15:24:23
2011-03-03 11:23:42
2011-03-03 11:28:49
2011-03-03 11:28:52
2011-03-04 12:30:15

Cheers

Tom

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to