Python 如何按'排序对象;状态';Django中的变量

Python 如何按'排序对象;状态';Django中的变量,python,django,django-queryset,Python,Django,Django Queryset,我试图找到一种方法,根据数据库对象的状态变量按顺序显示数据库对象列表。该应用程序是一个订单跟踪应用程序。每个订单都有一个状态:“空闲”、“等待交货”、“准备提货”等。我想显示订单列表,按其状态排序。我已经有一个过滤器在工作,但我想知道是否有办法对整个订单列表进行排序,使“空闲”订单排在首位,然后是“等待交货”订单,等等。显然,我不能只将status添加到admin.py文件中的ordering,因为这样会按字母顺序排列状态 有人知道解决这个问题的简单方法吗?我肯定我只是想得太多了。如果您想在SQ

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


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

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

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

class status (Model.model):
    status = Model.CharField()
    sort_order = Model.IntegerField()
您可以将此表与订单表合并,并按顺序排序

如果这看起来不实用,你可以考虑一个定制查询来为你排序。您可以使用

.extra
方法将其附加到orm方法。有关它的更多信息,请参见


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

   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)

我曾想过使用你提到的索引作为你的第一点。但是,除非绝对必要,否则我不想向数据库中添加任何内容。我也没有真正遵循您提到的第二种方法,因为我对Python/Django还是相当陌生的。不会痛的;-)
   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)