jango使用PostgreSQL的Model方法查询排序不区分

jango使用PostgreSQL的Model方法查询排序不区分

本文介绍了Django使用PostgreSQL的Model方法查询排序不区分大小写的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我真的很喜欢django,python和postgres ...当使用Model作为查询方法时,只有使用直接的SQL查询时,我似乎无法找到关于如何order_by的区分大小写的答案。 / p>

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

数据集和订单目前正在

中订购

  test 
b test
a测试通道
a测试通道
a测试2
ab测试
测试通道
测试3
测试3
测试2通道

任何帮助将不胜感激。

解决方案

使用:

  @ 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')
返回通道


I'm really new to django, python and postgres... I can't seem to find the answer on how to order_by being case insensitive while using Model as the query method, only if you use direct SQL queries.

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

Data set and order it's currently being ordered in

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

any help would be much appreciated.

解决方案

Using 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

这篇关于Django使用PostgreSQL的Model方法查询排序不区分大小写的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-26 16:21