class MyModel:
name = charField()
code = charField(unique=True)
這就是所有的模型。沒有其他領域或元類,什麼都沒有..這一切都在這裏。
和MySQL表我有8個條目/行
ID name code
-------------------------
8 Aborted ABT
7 Returned RTC
6 Delivery-Failed DLF
5 Delivered DLV
4 Out-for-Delivery OFD
3 Ready-to-Deliver RTD
2 Order-Placed OPD
1 in transit INT
這就是手段,我做的第一個條目是(「過境」,「INT」),然後OPD..and等。
所以當我在這個表上使用values_list
返回
MyModel.objects.values_list('code', 'name')
[(u'INT', u'in transit'), (u'OPD', u'Order-Placed'), (u'RTD', u'Ready-to-Deliver'), (u'OFD', u'Out-for-Delivery'), (u'DLV', u'Delivered'), (u'DLF', u'Delivery-Failed'), (u'RTC', u'Returned'), (u'ABT', u'Aborted')]
這是期待的順序,我的意思是第一項第一和最後的最後一個。
現在,當我做MyModel.objects.values_list('code')
返回
[(u'ABT',), (u'DLF',), (u'DLV',), (u'INT',), (u'OFD',), (u'OPD',), (u'RTC',), (u'RTD',)]
State.objects.values_list('code', flat=True)
返回相同的結果也是如此。
這似乎是隨機的,但它似乎是按字母順序排序的。
這還不是全部, 我甚至試圖通過在過濾器
MyMode.objects.filter(code__in=['DLF', 'RTC', 'ABT'][1:]).values_list('code', 'name')
切片列表,並將其再次返回一些無序的數據 [(u'ABT', u'Aborted'), (u'RTC', u'Returned')]
現在我想明白爲什麼會這樣。如果它在代碼中,爲什麼django開發者在默認情況下做了這種排序?
PS:我不是從日DOC發現什麼有用的 https://docs.djangoproject.com/en/1.9/ref/models/querysets/#values-list
代碼沒有說什麼太 https://github.com/django/django/blob/master/django/db/models/query.py#L146
PS:我使用Django 1.9.6和MySQL版本14.14 Distrib 5.5.47
您使用的是什麼版本的Django和MySQL?我用Django v1.8.6和PostgreSQL進行了測試,沒有觀察到字母排序 – rawbeans
'django 1.9.6'和'mysql Ver 14.14 Distrib 5.5.47' – Wendy