将Django按字母顺序更改为自定义排序

时间:2015-03-16 21:53:24

标签: python django django-models django-admin

我创建了一个模型Reservation,我的代码(models.py)看起来像这样:

#Choices
STATUS_CHOICES = ( ('APPROVED','Approved'),('PENDING', 'Pending'), ('CANCELED', 'Canceled') )

# Reservation model
class Reservation(models.Model):

    class Meta:
        ordering = ['-status']

    status = models.CharField(choices=STATUS_CHOICES, default='PENDING', max_length=25)

我想订购这样的预订:

  1. 已批准
  2. 取消
  3. 但我目前的订单是:

    1. 取消
    2. 已批准
    3. 看起来Django按字母顺序排序我的对象。

      如何将字母顺序更改为上述顺序?

      谢谢!

1 个答案:

答案 0 :(得分:2)

您可以将状态更改为IntegerField,并为这三种状态定义常量。然后按状态排序'应该做你想做的事。

PENDING = 1
APPROVED = 2
CANCELED = 3

STATUS_CHOICES = (APPROVED,'Approved'),(PENDING, 'Pending'), (CANCELED, 'Canceled))

或者您可以使用字段StatusChoice创建sort_order模型。使Reservation.status成为新模型的外键,并按status__sort_order排序。

另一种选择是使用extra()中的order_by参数对SQL进行排序。