Получить последний элемент списка в Джанго - PullRequest
1 голос
/ 10 августа 2011

У меня есть модель:

class List:
    data = ...
    previous = models.ForeignKey('List', related_name='r1')
    obj = models.ForeignKey('Obj', related_name='nodes')

Это список направлений, содержащий ссылку на некоторый объект класса Obj. Я могу изменить соотношение и получить список всех элементов, ссылающихся на obj:

obj.nodes

Но как я могу получить самый последний узел? Без использования raw sql генерирует как можно меньше запросов SQL от django.

Ответы [ 4 ]

4 голосов
/ 10 августа 2011

obj.nodes - это RelatedManager, а не список. Как и с любым менеджером, вы можете получить последний запрашиваемый элемент по

obj.nodes.all().reverse()[0]

В любом случае, это имеет смысл только в том случае, если в метаклассе Node определен какой-либо порядок по умолчанию, поскольку в противном случае семантика «reverse» не имеет никакого смысла. Если у вас нет указанного порядка, установите его явно:

obj.nodes.order_by('-pk')[0]
1 голос
/ 23 июня 2016

Я вижу, что этот вопрос довольно старый, но в новых версиях Django теперь есть методы first () и last () для наборов запросов.

1 голос
/ 10 августа 2011
len(obj.nodes)-1 

должен дать вам индекс последнего элемента (считая от 0) вашего списка

, поэтому что-то вроде

obj.nodes[len(obj.nodes)-1]

должно дать последний элемент списка iЯ не уверен, что это хорошо для вашего случая, просто попробуйте :))

0 голосов
/ 10 августа 2011

Ну, вы можете просто использовать индекс [-1], и он вернет последний элемент из списка. Может быть, этот вопрос близок к вашему:

Получение последнего элемента списка в Python

...