首页 > 解决方案 > 订购名称订单不符合我的要求

问题描述

我的代码如下:

class SwitchesPort(models.Model):

    name = models.CharField(max_length=32, unique=True)
    desc = models.CharField(max_length=256, null=True, blank=True)

    class Meta:
        ordering = ['name']

顺序是name,你看快照,这不能满足我的需要。

我想要1, 2, ..., 9, 10, 11, 12....,但是有1, 10, 11, ... 2, 3, ..

那么,如果我可以根据名称的长度添加订购项目?

如何根据name字段长度创建订购项目?所以我可以使用

ordering = ['-name_length', 'name']  

编辑-1

我试过使用order_by(Length('name').asc())

class SwitchesPortListAPIView(ListAPIView):
    serializer_class = SwitchesPortListSerializer
    permission_classes = []
    queryset = SwitchesPort.objects.all().order_by(Length('name').asc())

但是,但是我得到了以下结果,ordering name现在似乎不起作用。

标签: pythondjango

解决方案


使用多参数作为订单参数,name在其中添加:

class SwitchesPortListAPIView(ListAPIView):
    serializer_class = SwitchesPortListSerializer
    permission_classes = []
    queryset = SwitchesPort.objects.extra(select={'length':'Length(name)'}).order_by('length', 'name')

推荐阅读