我创建了一个模型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)
我想订购这样的预订:
但我目前的订单是:
看起来Django按字母顺序排序我的对象。
如何将字母顺序更改为上述顺序?
谢谢!
答案 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进行排序。