天天看點

Django擷取資料的上一條prev_in_order()和下一條資料next_in_order()方法

目的

django-next-prev提供實用程式來擷取有序的過濾查詢集中的下一個或上一個項目。例如,您可以在文章詳細資訊頁面上顯示指向下一個精選文章的連結,或者顯示所有已釋出文章的按時間順序排列的下一個和上一個連結。

安裝

從​​https://pypi.python.org/pypi/django-next-prev/​​下載下傳源代碼 并運作python setup.py install

或者

pip install django-next-prev

需要Django 1.8或更高版本。

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')      
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)