今天我在django控制台上尝试了这个,我得到了两个不同的结果。我认为list.reverse()
会反转列表(即第一个对象变为最后一个,依此类推)[1]。但事实并非如此。
>>> from django.db.models import Q
>>> q1 = Q(result=1)
>>> q2 = Q(result=-1)
>>> q3 = q1 | q2
>>> form = UserData.objects.filter(user=user).filter(coins__gt=0).filter(q3).order_by('-modified', '-placed').values_list('result', flat=True)[:10]
>>> form
Out[14]: [-1, -1, -1, -1, -1, 1, -1, 1, -1, -1]
>>> form.reverse()
Out[15]: [1, 1, 1, 1, 1, 1, 1, -1, -1, -1]
>>> form_bw = []
>>> for f in reversed(form):
... form_bw.append(f)
...
>>> form_bw
Out[18]: [-1, -1, 1, -1, 1, -1, -1, -1, -1, -1]
我做错了什么?显然我想要的是form_bw
答案 0 :(得分:4)
当你这样做时
querysert.order_by('-modified', '-placed').reverse()
实际上意味着
querysert.order_by('modified', 'placed')
因此,如果结果是意外的,只需在Python中反转
list(reversed(values_list))
或者您必须检查reverse
带给查询集的排序逻辑。
答案 1 :(得分:4)
form
不是列表。它是一个QuerySet,它与列表有许多相似之处,但不是一个。特别是,它定义了reverse
method,它实际上返回到数据库,以相反的顺序请求项目。
答案 2 :(得分:3)
form
真的是一个列表吗?请注意,list.reverse
不会返回结果,因此您的提示结果看起来很可疑:
In [1]: lst = [1, 2, 3, 4]
In [2]: lst.reverse() # <-- note: no result returned here (~ None)
In [3]: lst
Out[3]: [4, 3, 2, 1]
In [4]:
另外,作为附注,使用reversed
的更好方法是:
In [5]: lst = [1, 2, 3, 4]
In [6]: rev = list(reversed(lst))
In [7]: rev
Out[7]: [4, 3, 2, 1]
或者,只需使用带有否定步骤的切片:
In [8]: rev = lst[::-1]
In [9]: rev
Out[9]: [4, 3, 2, 1]
答案 3 :(得分:3)
我不是Django专家,因此不确定form
的类型是什么。但是,很明显它不是标准列表:
>>> form.reverse()
Out[15]: [1, 1, 1, 1, 1, 1, 1, -1, -1, -1]
内置list.reverse()
函数返回None
,而此reverse()
函数似乎返回不同的内容。这使我得出结论:form
不是列表。
尝试以下方法:
form = list(form)
form.reverse()
另请注意:
>>> form_bw = []
>>> for f in reversed(form):
... form_bw.append(f)
只是一个很长的路要说:
>>> form_bw = list(reversed(form))
答案 4 :(得分:0)
尽管这里的其他解决方案在大多数情况下都是正确的,但是使用Django QuerySet的values_list时,它没有用。
唯一的方法是:
season_ids = matchesByLeague.values_list('season_id', flat=True).distinct()
season_ids = list(reversed(season_ids))
#Not working
#season_ids = matchesByLeague.values_list('season_id', flat=True).distinct()
#season_ids.reverse()
#season_ids = matchesByLeague.values_list('season_id', flat=True).distinct().reverse()
#reversed(list(season_ids))
感谢@NPE和@xpanta