获取Django中列表的最后一个元素

时间:2011-08-10 12:53:07

标签: sql django list django-models

我有一个模特:

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

这是一个方向列表,包含对Obj类的一些obj的引用。我可以通过以下方式反转关系并得到一些列表的所有元素引用obj:

obj.nodes

但是如何才能获得最后一个节点?不使用原始sql,可以像django那样简单地进行SQL查询。

4 个答案:

答案 0 :(得分:4)

obj.nodes是一个RelatedManager,而不是一个列表。与任何经理一样,您可以通过

获取最后查询的元素
obj.nodes.all().reverse()[0]

无论如何,只有在Node的Meta类上定义了任何默认顺序时才有意义,因为否则“反向”的语义没有任何意义。如果您没有任何指定的订单,请明确设置:

obj.nodes.order_by('-pk')[0]

答案 1 :(得分:1)

len(obj.nodes)-1 

应该为您提供列表中最后一个元素(从0开始计算)的索引

类似

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

应该给出列表的最后一个元素 我不确定这对你的情况有好处,试一试:)

答案 2 :(得分:1)

我看到这个问题已经很老了,但是在较新版本的Django中,现在查询集上有first()和last()方法。

答案 3 :(得分:0)

好吧,你可以使用[-1]索引,它将返回列表中的最后一个元素。也许这个问题与你的问题很接近:

Getting the last element of a list in Python