如何通过带数字的字段在Django中订购QuerySet?

Mou*_*Tio 0 python django django-queryset

我想通过一个包含数字的字段来命令QuerySet.我有这个代码:

MyTable.objects.all().order_by('my_char_field')
Run Code Online (Sandbox Code Playgroud)

有一些"my_char_field"的例子:

"ver3", "ver10", "x5.1 (1)", "ver4", "x5.1 (2)"
Run Code Online (Sandbox Code Playgroud)

上面代码的顺序结果是:

"ver10", "ver3", "ver4", "x5.1 (1)", "x5.1 (2)"
Run Code Online (Sandbox Code Playgroud)

但我想要的顺序是:

"ver3", "ver4", "ver10", "x5.1 (1)", "x5.1 (2)"
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得自然顺序?

Say*_*yse 5

这似乎更像是一个数据存储问题.如果更改数据结构,则会变得更加容易

version_type = models.CharField()
version_num = models.FloatField()
version_revision = models.SmallIntegerField(null=True)

unique_together = [('version_type', 'version_num', 'version_revision')]

.order_by('version_type', 'version_num', 'version_revision')
Run Code Online (Sandbox Code Playgroud)

这也将解决你的下一期"如何有效地获得'ver'类型的所有版本?"