我试图找到一种方法来显示基于其status
变量的订单中的数据库对象列表。该应用程序是一个订单跟踪应用程序每个订单都有一个状态:'空闲','等待交货','准备好提货'等。我想显示订单列表,按其状态排序。我已经有一个正在运行的过滤器,但我想知道是否有办法对整个订单列表进行排序,以便“空闲”订单位于顶部,然后是“等待交付”订单,依此类推。显然,我不能在status
文件中将ordering
添加到admin.py
,因为这会按字母顺序对状态进行排序。
有人知道解决此问题的简单方法吗?我确定我只是在考虑这件事......
答案 0 :(得分:1)
我最终做的就是为每个状态名称添加一个字母字符。由于我已经为每个状态提供了一个漂亮,简洁的详细名称,因此我认为它不会影响可读性。我不能说它是世界上最好的解决方案,但我相信它是最简单的。
STATUS_OF_ORDER = (
('A_IDLE', 'Not yet ordered'),
('B_SHIP', 'Awaiting delivery'),
('C_PICK', 'Ready for pickup'),
('E_UNAV', 'Unavailable for order'),
('D_BACK', 'Backordered - awaiting delivery'),
('F_CANC', 'Canceled by customer'),
('G_ARCH', 'Fulfilled'),
)
status = models.CharField(max_length=6, choices=STATUS_OF_ORDER,
default='A_IDLE', editable=False)
答案 1 :(得分:0)
如果要在SQL中排序,有两种方法可以实现此目的。
创建一个将您的状态与数值
相关联的模型class status (Model.model):
status = Model.CharField()
sort_order = Model.IntegerField()
您可以将此表与订单表和sort_order
订购如果这对您来说似乎不切实际,请考虑为您执行排序的自定义查询。您可以使用.extra
方法将此附加到您的orm方法。在django documentation
Order By Case
When status_order Like 'idle Then 1
When status_order Like 'awaiting delivery' Then 2
When status_order Like 'ready for pickup' Then 3
Else 99
End Asc