Существует ли умный способ получить предыдущий/следующий объект с помощью Django ORM?

Скажите, что у меня есть список фотографий, заказанных датой создания, следующим образом:

class Photo(models.Model):
    title = models.Char()
    image = models.Image()
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ('-created',)

У меня есть произвольный фото объект photo_x. Существует ли простой способ найти предыдущие и следующие фотографии положением в queryset? Кроме того, я хотел бы повториться, если я в начале/конце и имею его не, перестали работать если только 1 или 2 фотографий.

20
задан Jason Christa 19 December 2009 в 01:56
поделиться

1 ответ

Вам повезло! Django по умолчанию создает методы get_next_by_foo и get_previous_by_foo для DateField и DateTimeField , если у них нет [= 11324] 1132411].

Например:

>>> from foo.models import Request
>>> r = Request.objects.get(id=1)
>>> r.get_next_by_created()
<Request: xyz246>

И если вы дойдете до конца набора, это вызовет исключение DoesNotExist , которое вы можете легко использовать в качестве триггера для возврата к началу набора :

>>> r2 = r.get_next_by_created()
>>> r2.get_next_by_created()
...
DoesNotExist: Request matching query does not exist.

Дополнительная литература: Дополнительные методы экземпляра

32
ответ дан 30 November 2019 в 00:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: