我认为这里的实现(https://github.com/nathforge/django-
naturalsortfield)应该可以工作。这种方法的主要优点是它不会在python中进行排序,而是在数据库中进行排序,因此即使在大型数据集上也能很好地执行,但要花一些额外的存储空间。
您必须更改模型以包含product_pre__sort字段
class MyModel(models.Model): title = models.CharField(max_length=255) title_sort = NaturalSortField('title')其中NaturalSortField定义为
class NaturalSortField(models.CharField): def __init__(self, for_field, **kwargs): self.for_field = for_field kwargs.setdefault('db_index', True) kwargs.setdefault('editable', False) kwargs.setdefault('max_length', 255) super(NaturalSortField, self).__init__(**kwargs) def pre_save(self, model_instance, add): return self.naturalize(getattr(model_instance, self.for_field)) def naturalize(self, string): def naturalize_int_match(match): return '%08d' % (int(match.group(0)),) string = string.lower() string = string.strip() string = re.sub(r'^thes+', '', string) string = re.sub(r'd+', naturalize_int_match, string) return string


