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