python - 订购名称订单不符合我的要求
问题描述
我的代码如下:
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
现在似乎不起作用。
解决方案
使用多参数作为订单参数,name
在其中添加:
class SwitchesPortListAPIView(ListAPIView):
serializer_class = SwitchesPortListSerializer
permission_classes = []
queryset = SwitchesPort.objects.extra(select={'length':'Length(name)'}).order_by('length', 'name')
推荐阅读
- odata - 尽管使用了 Hierarchy-Annotations,UI5 TreeTable 仍显示平面层次结构
- ansible - 从 anisble 中的字典中提取多个值
- php - What causes Website timeout when it is working flawlessly with vpn?
- python - 在 Pandas 中使用 groupby、聚合函数创建多列计算
- php - PHP cookie 不适用于 iOS/Chrome 的 WP 引擎服务器
- mongodb - 如何知道 MongoDB 查询占用的网络字节数?
- conda - conda EnvironmentNameNotFound 疑难解答
- asp.net-core - 配置后如何获取 appSetting(ASP.NET Web API DI)
- php - 使用 get_coupons() 未检索到的代码中添加的 WooCommerce 优惠券
- sql - SQL 查找代码