4
(我有一个Django 1.1.2和PostgreSQL的开发环境。) 我有两个疑问:查询限制和订单不能在Django一起工作
tables = Table.objects.filter(is_active = True,
finishes_at__lt=datetime.datetime.now()
).order_by("-starts_at", "weight")[:20]
,另一种是
tables = Table.objects.filter(is_active = True,
finishes_at__lt=datetime.datetime.now()
).order_by("-starts_at", "weight")
这两个查询都是相同的,只是第一个查询的末尾有[:20]
(LIMIT 20)。 但是当我运行这两个查询。我看到结果集有不同的顺序。有没有办法纠正这个问题?
注意: 我在dbshell中运行查询,我看到实际上以不同顺序给出结果的查询。以下是查询产生的Django
SELECT "table_table"."id" FROM "table_table"
WHERE ("table_table"."is_active" = True
AND "table_table"."finishes_at" < '2010-11-09 11:57:48.482720')
ORDER BY "table_table"."starts_at" DESC, "table_table"."weight" ASC
,是其中一种限制是
SELECT "table_table"."id" FROM "table_table"
WHERE ("table_table"."is_active" = True
AND "table_table"."finishes_at" < '2010-11-09 11:57:48.482720')
ORDER BY "table_table"."starts_at" DESC, "table_table"."weight" ASC LIMIT 20
好的我发现了这个问题。如果表对象具有相同的starts_at和weight值,则结果集结果可能会按不同顺序排列。例如在我的结果集中,我有20行,其中两个具有相同的starts_at和weight值。在这种情况下,他们在不同的结果集中有不同的顺序。为了解决这个问题,我添加了命名属性。现在他们有相同的顺序。 – yilmazhuseyin 2010-11-09 13:03:36