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

Change Django alphabetical ordering to custom ordering

我创建了一个模型 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 正在按字母顺序排列我的对象。

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

谢谢!

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

PENDING = 1
APPROVED = 2
CANCELED = 3

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

或者您可以创建一个带有字段 sort_orderStatusChoice 模型。使 Reservation.status 成为新模型的外键,并按 status__sort_order.

排序

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