5

我对 django、python 和 postgres 真的很陌生......我似乎无法找到关于如何在使用 Model 作为查询方法时不区分大小写的 order_by 的答案,只有当您使用直接 SQL 查询时。

Model
@classmethod
def get_channel_list(cls, account):
    return cls.objects.filter(accountid=account).order_by('-name').values_list('name', 'channelid')

当前订购的数据集和顺序

test
b test
a test channel
a test channel
a test 2 
a b test
Test Channel
Test 3
Test 3
Test 2 Channel

任何帮助将非常感激。

4

2 回答 2

22

使用 django 1.8,有一个内置的解决方案:

from django.db.models.functions import Lower
...
ret = ret.order_by(Lower('name_lower'))
ret = ret.order_by(Lower('name_lower').asc())
ret = ret.order_by(Lower('name_lower').desc())
于 2015-04-14T19:45:36.737 回答
1

使用QuerySet.extra(select=...)

@classmethod
def get_channel_list(cls, account):
    ret = cls.objects.extra(select={'name_lower': 'lower(name)'})
    ret = ret.order_by('-name_lower')
    ret = ret.filter(accountid=account).values_list('name', 'channelid')
    return channels
于 2013-12-25T04:18:25.950 回答