https://docs.djangoproject.com/en/1.5/intro/tutorial01/
我正在关注Django教程并接近第1部分的末尾,其中调用p.choice_set.all()我以相反的顺序显示。
例如我得到:再次黑客攻击,天空,不多 而不是:不多,天空,再次黑客攻击
知道为什么我会收到逆序吗?我按照教程指示的顺序输入它。
我正在运行PostgreSQL。
答案 0 :(得分:2)
如果您没有明确地执行order_by()
,则无法保证将返回结果的订单。
不确定PostgreSQL,但对于MySQL,实际上,如果您只根据某个索引列选择行的子集,它会按该索引排序,但是如果你是“re”选择每一行,它将使用表格扫描并按照它们存储在磁盘上的顺序返回结果。
关于磁盘顺序,如果你曾经删除了一行,那么当你下一次插入一行时,它会尝试填充该行使用的空间,所以如果你有......
ID Name
1 Bob
2 Fred
3 Jim
...然后删除第一行,然后添加一个新行,你得到......
ID Name
4 Jeff
2 Fred
3 Jim
...此时SELECT * FROM my_table
将按顺序4,2,3返回它们,而SELECT * FROM my_table WHERE id > 1
将(可能)按顺序2,3,4返回它们。 / p>
答案 1 :(得分:1)
简单说明:
您可以按order_by()
订购字段,如果您不使用它,则会按ID排序。这就是您获得尊敬订单的原因。
您可以通过简单的循环检查:
for item in p.choice_set.all():
print item.id
由于