如何在Djang中按“status”变量对对象排序

2024-05-23 15:19:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到一种方法,根据数据库对象的status变量按顺序显示它们的列表。该应用程序是一个订单跟踪应用程序。每个订单都有一个状态:“空闲”、“等待交货”、“准备取货”等。我想显示订单列表,按状态排序。我已经有一个过滤器正在工作,但我想知道是否有一种方法可以对整个订单列表进行排序,使“空闲”订单排在最前面,然后是“等待交货”订单,等等。显然,我不能仅仅将status添加到admin.py文件中的ordering中,因为这会按字母顺序对状态进行排序。在

有人知道解决这个问题的简单方法吗?我肯定我只是想得太多了。。在


Tags: 对象方法py订单数据库应用程序过滤器列表
2条回答

如果您想在SQL中进行排序,有两种方法可以实现这一点。在

创建一个将您的状态与数值链接的模型

class status (Model.model):
    status = Model.CharField()
    sort_order = Model.IntegerField()

您可以将此表与order表和order by sort\u order连接起来

如果这对您来说似乎不实用,请考虑一个为您执行排序的自定义查询。您可以使用.extra方法将其附加到orm方法。有关它的更多信息请参见django documentation

^{pr2}$

最后我所做的就是给每个状态名添加一个字母字符。因为我已经为每个状态提供了一个漂亮、整洁的详细名称,所以我认为它不会对可读性造成太大影响。我不能说这是世界上最好的解决办法,但我相信它是最简单的。在

   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)

相关问题 更多 >