将 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)
我想这样预订:
- 待定
- 已批准
- 已取消
但我目前的订单是:
- 待定
- 已取消
- 已批准
看起来 Django 正在按字母顺序排列我的对象。
如何将字母顺序更改为上述顺序?
谢谢!
您可以将状态更改为 IntegerField
,并为这三种状态定义常量。然后按 'status' 排序应该做你想要的。
PENDING = 1
APPROVED = 2
CANCELED = 3
STATUS_CHOICES = (APPROVED,'Approved'),(PENDING, 'Pending'), (CANCELED, 'Canceled))
或者您可以创建一个带有字段 sort_order
的 StatusChoice
模型。使 Reservation.status
成为新模型的外键,并按 status__sort_order
.
排序
另一种选择是使用 extra()
中的 order_by
参数对 SQL 进行排序。
我创建了一个模型 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 正在按字母顺序排列我的对象。
如何将字母顺序更改为上述顺序?
谢谢!
您可以将状态更改为 IntegerField
,并为这三种状态定义常量。然后按 'status' 排序应该做你想要的。
PENDING = 1
APPROVED = 2
CANCELED = 3
STATUS_CHOICES = (APPROVED,'Approved'),(PENDING, 'Pending'), (CANCELED, 'Canceled))
或者您可以创建一个带有字段 sort_order
的 StatusChoice
模型。使 Reservation.status
成为新模型的外键,并按 status__sort_order
.
另一种选择是使用 extra()
中的 order_by
参数对 SQL 进行排序。