我想获取列的最后一个值。我怎么才能得到它?对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
,但是花了这么长时间我想改变。
谢谢!
答案 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)