def test_order_by_lower(self):
from django.db.models.functions import Lower
c = Category.objects.create(name='test')
Blog.objects.create(title='A', title_nl='c', category=c)
Blog.objects.create(title='a', title_nl='b', category=c)
filtered = Blog.objects.filter(category=c)
# order by title should result in aA because it is case sensitive.
qs = filtered.order_by('title', 'title_nl')
self.assertEquals(key(qs, 'title'), ['a', 'A'])
# order by Lower('title') should result in Aa because lower('A') == lower('A')
# so the title_nl field should determine the sorting
qs = filtered.order_by(Lower('title'), 'title_nl')
self.assertEquals(key(qs, 'title'), ['a', 'A'])
# applying lower to title_nl should not matter since it is not the same letter
qs = filtered.order_by(Lower('title_nl'))
self.assertEquals(key(qs, 'title'), ['a', 'A'])
# should be the same as previous
with override('nl'):
qs = filtered.order_by(Lower('title_i18n'))
self.assertEquals(key(qs, 'title'), ['a', 'A'])
评论列表
文章目录