zoukankan      html  css  js  c++  java
  • django orm order_by 根据汉字首字母排序 [ORDER BY CONVERT(name USING gbk)ASC]查询

    首先mysql sql语句查询公司名称首字母排序如下:

    SELECT * FROM `表名` ORDER BY CONVERT (company USING gbk) Desc;

    django框架用orm查询

    models.Contacts.objects.all().order_by('CONVERT (company USING gbk)')

    这样直接排序会报错:

    FieldError: Cannot resolve keyword 'CONVERT (name USING gbk)' into field

    所以这种方式行不通,但我们又不想用sql查询

    看到这位网友提醒:

    http://cn.voidcc.com/question/p-zzfegywi-sk.html

     此方法写法有误,已修改

    总结如下:

    models.py文件

        

    from django.db.models import Func, Value
    class Convert(Func):
        def __init__(self, expression, transcoding_name, **extra):
    super(Convert, self).__init__(
    expression=expression, transcoding_name=transcoding_name, **extra)

    def as_mysql(self, compiler, connection):
    self.function = 'CONVERT'
    self.template = ' %(function)s(%(expression)s USING %(transcoding_name)s)'
    return super(Convert, self).as_sql(compiler, connection)

    用法:

    order_by(models.Convert('company', 'gbk').asc())
    order_by(models.Convert('company', 'gbk').desc())

    如遇到其他问题,请加群讨论

    
    


     
  • 相关阅读:
    sql STUFF用法
    关于原型链
    原生js事件绑定
    http常见7种请求
    关于linux的一些常用的指令
    flex布局详解
    html5 新增元素以及css3新特性
    css浮动以及清除
    css 浮动
    计算机网络
  • 原文地址:https://www.cnblogs.com/chaihy/p/14240081.html
Copyright © 2011-2022 走看看