列QuerySet API(Django)的最后一个值

时间:2014-03-28 09:09:16

标签: mysql django django-queryset

我想获取列的最后一个值。我怎么才能得到它?对SELECT column_name FROM table_name ORDER BY id DESC LIMIT 1的Django查询集的转换。这在MySQL中工作正常,但我不能在Django中找到等效的。建议?溶液

之前,它是一个生成如下查询集的查询集:SELECT MAX(column_name) FROM table_name WHERE column_name_2 = x,但是花了这么长时间我想改变。

谢谢!

2 个答案:

答案 0 :(得分:1)

您的问题可能是[-1]索引(在python中表示“获取最后一项”)对查询集不起作用:

> YourModel.objects.order_by('id')[-1]
Traceback
...
AssertionError: Negative indexing is not supported.

简单的解决方案是颠倒顺序并获得第一个,这正是您在手写SQL中所做的:

> YourModel.objects.order_by('-id')[0]
<YourModel....>

在列名前面放置-可以反转排序顺序。所以这可能是你需要的提示。

由于Django 1.6在查询集上有特殊的.first().last()方法,请参阅Django's docs。它看起来像这样:

> YourModel.objects.order_by('id').last()
<YourModel....>

接下来,你想得到的只是价值。 Django有.values().values_list()。如果我只想要一个单值列表,我经常使用.values_list('some single field', flat=True)。在你的情况下:

> YourModel.objects.order_by('id').values_list('column_name', 
                                               flat=True).last()
1234

当然,在这种情况下,只需抓取对象的值就可以了:

> YourModel.objects.order_by('id').last().column_name
1234

答案 1 :(得分:0)

等价物如下:

YourModel.objects.order_by('column_name')[0]

有关文档,请参阅here