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