tags:

views:

77

answers:

4

I've just started to learn how to do queries in my Django application, and I have a query that gets me the list of new users filtered by the date joined:

newUsers = User.objects.filter(is_active=True).order_by("-date_joined")

This as I understand it gives me ALL the users, sorted by date joined. How would I best limit it to get me the last N users?

On this, does anyone recommend and reading material to learn more about these types of queries?

+5  A: 
User.objects.filter(is_active=True).order_by("-date_joined")[:10]

will give you the last 10 users who joined. See the Django docs for details.

Aaron
+1  A: 

you can use list slice operation on constructed queries e.g.

For example, this returns the first 5 objects (LIMIT 5):

Entry.objects.all()[:5]

This returns the sixth through tenth objects (OFFSET 5 LIMIT 5):

Entry.objects.all()[5:10]

Read django documentation http://docs.djangoproject.com/en/dev/topics/db/queries/

Anurag Uniyal
A: 

BTW, if u would just divide amount of all user, (for example, 10 per site) you should interest pagination in dJango, very helpful http://docs.djangoproject.com/en/dev/topics/pagination/#topics-pagination

Rin
+1  A: 
User.objects.filter(is_active=True).order_by("-date_joined")[:10]

QuerySets are lazy [ http://docs.djangoproject.com/en/dev/ref/models/querysets/ ]. When you're slicing the list, it doesn't actually fetch all entries, load them up into a list, and then slice them. Instead, it fetches only the last 10 entries.

Ramkumar Ramachandra