Django utility to retrieve the next or previous object, given a current object and a queryset.
django-next-prev provides utilities to get the next or previous item within an ordered, filtered queryset. For example, you could display a link to the next featured post on a post detail page, or show chronological next and previous links for all published posts.
Download the source from https://pypi.python.org/pypi/django-next-prev/ and run python setup.py install, or:
> pip install django-next-prev
Django 1.8 or higher is required.
Given this models.py:
from django.db import models class Category(models.Model): title = models.CharField(max_length=100) class Post(models.Model): title = models.CharField(max_length=100) category = models.ForeignKey(Category, on_delete=models.CASCADE) created = models.DateField() text = models.TextField() class Meta: ordering = ('created', 'title')
You can do the following
from next_prev import next_in_order, prev_in_order from .models import Post # default ordering first = Post.objects.first() second = next_in_order(first) prev_in_order(second) == first # True last = prev_in_order(first, loop=True) # custom ordering qs = Post.objects.all().order_by('-created') newest = qs.first() second_newest = next_in_order(newest, qs=qs) oldest = prev_in_order(newest, qs=qs, loop=True)