bs = Blog.objects.all()[:-1]
报错如标题。
原因:Django的QuerySet是惰性的,意味着它们直到需要结果时才会执行。当你使用负索引进行切片时,Django无法将其转换为有效的SQL,因为SQL的LIMIT和OFFSET子句不支持负值。
a = [1,2,3,4]
b = a[:-1]
# 这种是可以的,因为a的值是定长的,已经初始化完成的
故报错的正确写法为:
c = Blog.objects.all().count()
bs = Blog.objects.all()[:c-1]