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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb79dcde18bb0c75c809224ed8656417fb3e56eb7e7064552772ffb11d203885 |
|
MD5 | 83f74d61d4417493ef55bec62ea48a0b |
|
BLAKE2b-256 | d49b00bd08cdd54e8e9cf3a321b59d8ad8bf287b7373ec06de7048696cc267b1 |