Skip to main content

Django utility to retrieve the next or previous object, given a current object and a queryset.

Project description

Circle CI codecov Latest Version

Purpose

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.

Installation

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.

Quick start

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()
    featured = models.BooleanField(default=False)
    text = models.TextField()

    class Meta:
        # order on primary key to make sure it's unique
        ordering = ('created', 'title', 'pk')

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', '-pk')
newest = qs.first()
second_newest = next_in_order(newest, qs=qs)
oldest = prev_in_order(newest, qs=qs, loop=True)

# filtered
qs = Post.objects.filter(featured=True)
first_featured = qs.first()
second_featured = next_in_order(first_featured, qs=qs)

Ordering considerations

Order fields must be non-nullable.

If results are inconsistent with the order of your queryset, you’re probably ordering on a non-unique combination of fields. For example, ordering = ('sort_order', ) with the duplicate sort_order values. To resolve this, add a unique field to your ordering, i.e. ordering = ('sort_order', 'pk')

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-next-prev-1.1.0.tar.gz (4.8 kB view details)

Uploaded Source

File details

Details for the file django-next-prev-1.1.0.tar.gz.

File metadata

  • Download URL: django-next-prev-1.1.0.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.1.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.8.1

File hashes

Hashes for django-next-prev-1.1.0.tar.gz
Algorithm Hash digest
SHA256 eb79dcde18bb0c75c809224ed8656417fb3e56eb7e7064552772ffb11d203885
MD5 83f74d61d4417493ef55bec62ea48a0b
BLAKE2b-256 d49b00bd08cdd54e8e9cf3a321b59d8ad8bf287b7373ec06de7048696cc267b1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page