Django:如何为 slug 字段获得正确的数字排序?
Django: How to get proper numerical ordering for a slug field?
slug 字段定义和模型的排序如下所示。
来自models.py:
class Ayah(models.Model):
suraya = models.SlugField(max_length=8,unique=True)
class Meta:
ordering = ['suraya']
但是,生成的订单中存在不希望的结果。
17-81-15
17-82-15
17-85-15
2-186-2
2-256-3
所需的顺序是破折号之前的数字顺序。
所以 2-whatever 应该在 17-whatever 之前按顺序排列。
可能有一种简单的方法可以通过正则表达式来实现。
根据您拥有的数据量,最简单的解决方案是添加另一个仅包含前导数字的列作为 IntegerField()
,然后使用它进行排序。
class Ayah(models.Model):
suraya = models.SlugField(max_length=8,unique=True)
suraya_sort = models.IntegerField()
class Meta:
ordering = ['suraya_sort']
然后覆盖 save()
方法以始终自动将第一个数字存储到排序列中。
slug 字段定义和模型的排序如下所示。
来自models.py:
class Ayah(models.Model):
suraya = models.SlugField(max_length=8,unique=True)
class Meta:
ordering = ['suraya']
但是,生成的订单中存在不希望的结果。
17-81-15
17-82-15
17-85-15
2-186-2
2-256-3
所需的顺序是破折号之前的数字顺序。 所以 2-whatever 应该在 17-whatever 之前按顺序排列。
可能有一种简单的方法可以通过正则表达式来实现。
根据您拥有的数据量,最简单的解决方案是添加另一个仅包含前导数字的列作为 IntegerField()
,然后使用它进行排序。
class Ayah(models.Model):
suraya = models.SlugField(max_length=8,unique=True)
suraya_sort = models.IntegerField()
class Meta:
ordering = ['suraya_sort']
然后覆盖 save()
方法以始终自动将第一个数字存储到排序列中。