Django models Django:如何为slug场获得合适的数值顺序?

Django models Django:如何为slug场获得合适的数值顺序?,django-models,operator-precedence,meta,slug,Django Models,Operator Precedence,Meta,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 所需的顺序是破折号前的数字顺序。 因此,无

段塞场定义和模型顺序如下所示

从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
所需的顺序是破折号前的数字顺序。 因此,无论什么事情,都应该在17点之前安排好


可能有一种简单的方法可以通过正则表达式来实现这一点。

根据您拥有的数据量,最简单的解决方案是添加另一列,其中只有前导数字作为
整型字段()
,然后使用它进行排序

class Ayah(models.Model):
    suraya = models.SlugField(max_length=8,unique=True)
    suraya_sort = models.IntegerField()

    class Meta:
        ordering = ['suraya_sort']

然后覆盖
save()
方法,始终自动将第一个数字存储到排序列。

谢谢。问题是我确实有很多数据,我从中吸取了教训,不要弄乱带有填充数据库的模型。我想到的是重写元类中的排序方法。我不擅长正则表达式,可能需要whıch来完成这项工作。如果您确实有大量数据,则不希望使用Python进行排序,因为您需要加载表的全部内容来对其进行排序。因此,它必须在SQL中完成。提取第一个数字的正则表达式是
“^\d+”