我在找一本漫画书的下一期和上一期。简单地更改id号或通过添加日期进行过滤是行不通的,因为我没有按顺序添加问题。
这就是我的视图是如何设置的,它适用于prev_issue
,并返回前一个对象,但它返回next_issue
的最后一个对象,我不知道为什么。
def issue(request, issue_id):
issue = get_object_or_404(Issue, pk=issue_id)
title = Title.objects.filter(issue=issue)
prev_issue = Issue.objects.filter(title=title).filter(number__lt=issue.number)[0:1]
next_issue = Issue.objects.filter(title=title).filter(number__gt=issue.number)[0:1]
字符串
7条答案
按热度按时间mspsb9vt1#
添加
order_by
子句以确保它按number
排序。字符串
rbpvctlc2#
我知道这有点晚,但对于其他人来说,django确实有更好的方法来做到这一点,请参阅https://docs.djangoproject.com/en/1.7/ref/models/instances/#django.db.models.Model.get_previous_by_FOO
所以这里的答案应该是
字符串
Django管理者通过一点Meta类的清晰度来做到这一点。
r8uurelv3#
如果需要查找按字段值排序的next和previous对象,并且这些字段不是
Date*
类型,则查询会稍微复杂一些,因为:[:1]
限制的具有相同值的对象上进行排序将总是对多个对象产生相同的结果;以下是查询集,它也考虑了主键以产生正确的结果(假设OP中的
number
参数不是唯一的,并省略了title
参数,因为它与示例无关):上一页:
字符串
下一页:
型
velaa5lx4#
字符串
qyuhtwio5#
请注意,不要使用
object.get(pk=object.pk + 1)
这类东西,如果删除该pk处的对象,则会发生IntegrityError,因此始终使用查询集参观者:
字符串
original author
用法
型
7uhlpewt6#
对我很有效
字符串
ss2ws0br7#
next_obj_id = int(current_obj_id)+ 1 next_obj = Model.objects.filter(id=next_obj_id).first()
prev_obj_id= int(current_obj_id)- 1 prev_obj = Model.objects.filter(id=prev_obj_id).first()
你在这里没有什么可失去的...这对我很管用