【问题标题】:Django - How to sort queryset by number of character in a fieldDjango - 如何按字段中的字符数对查询集进行排序
【发布时间】:2012-09-30 01:34:53
【问题描述】:

我的模特:

name = models.CharField(max_length=255)

我尝试对查询集进行排序。我就是这么想的:

obj = MyModel.objects.all().sort_by(-len(name)) #???

有什么想法吗?

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    新的热点(Django 1.8 左右)是Length()

    from django.db.models.functions import Length
    obj = MyModel.objects.all().order_by(Length('name').asc())
    

    【讨论】:

      【解决方案2】:

      您需要使用 extra 参数来传递 SQL 函数:

      obj = MyModel.objects.all().extra(order_by=['LENGTH(`name`)']) 
      

      请注意,这是特定于 db 的:MySQL 使用 LENGTH,其他人可能使用 LEN

      【讨论】:

        【解决方案3】:

        您当然可以使用 Python 的sorted 对结果进行排序,但这并不理想。相反,你可以试试这个:

        MyModel.objects.extra(select={'length':'Length(name)'}).order_by('length')
        

        【讨论】:

          【解决方案4】:

          您可能需要在 python 中对其进行排序..

          sorted(MyModel.objects.all(),key=lambda o:len(o.name),reverse=True)

          或者我撒了谎(谷歌快速搜索发现以下内容)

          MyModel.objects.extra(select={'length':'Length(name)'}).order_by('length')
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-11-26
            • 2020-08-16
            • 2019-01-13
            • 1970-01-01
            • 1970-01-01
            • 2020-02-19
            • 1970-01-01
            • 2020-10-24
            相关资源
            最近更新 更多