Querysets являются генераторами, поэтому на самом деле не существует ярлыка, аналогичного qs[qs.indexof(slug="..")+1]
.Любое решение, которое вы придумали, все еще требует итерации по набору запросов (по крайней мере, до целевого объекта).
Как вы упомянули, возможный способ сделать это состоял бы в том, чтобы пройтись по набору запросов и вернуть один сразу послеодин с slug = "slug-456".
Конечно, вы можете выбрать более запутанный маршрут и сделать что-то вроде:
# get slugs in order
sio = list(qs.objects.values_list('slug', flat=True))
target_slug = sio[sio.index(sio) + 1] # watch for KeyError
your_object = qs.objects.get(slug__exact=target_slug)
, хотя и забавно писать, этомаловероятно, что это даст какой-либо выигрыш в производительности (если ваша модель не имеет много полей, и в этом случае может оказаться целесообразным повторение вывода values_list()
first).
Связанный ответ: Получите индекс элемента вQuerySet .