获取下一张和上一张图片的最佳方式Django

时间:2014-03-04 11:47:27

标签: python mysql django model

我在为我的成像​​网站选择下一条和上一条记录时遇到问题。 Scenrio非常简单。但它让我有点困惑

我有图像列表,按照添加日期排序。 (最近一次)。

Picture.objects.all().order_by('-created_at')

当用户打开图像时,我必须提供下一张和上一张图片的链接。

image = Picture.objects.get(id=pic_id)
next = Picture.objects.filter(created_at__lte=image.created_at)
previous = Picture.objects.filter(created_at__gte=image.created_at)

if next:
    next = next.exclude(id=image.id).order_by('-created_at')[0]
if previous:
    previous = previous.exclude(id=image.id).order_by('created_at')[0]

return (next, previous)

这里的问题是,当两张或多张图片具有相同的created_at日期时,则存在问题,less than or equal检查失败。如果我将其限制为less than而不是Pic,并且未在下一个或上一个中选择相同的日期和时间。 `

  

(多文件上传同时保存数据库中的图像)

请检查代码,看看我需要改进的地方。

感谢。

1 个答案:

答案 0 :(得分:2)

由于您已经意识到仅使用创建的日期不会给您确定性排序,您还应该按照图片的ID排序。之前的图片是创建日期小于当前图片的图片,或者具有相同的创建日期和之前的ID。

因为这是一个复杂的查询,您需要使用Q objects

next = Picture.objects.filter(Q(created_at__lt=image.created_at) | Q(created_at=image.created_at, id__lt=image.id))

if next:
    next = next.order_by("-created_at", "id")[0]