Python Django管理员:自定义订购

Python Django管理员:自定义订购,python,django,django-admin,django-filter,Python,Django,Django Admin,Django Filter,我有一个模型的版本字段,一个字符串字段。我通过该字段(“-version”)定义了Django管理员排序 问题是python的版本比较在字符串方面不起作用。例如: vers=['5.10.0.','5.9.0','5.8.0'] vers[0]>vers[1] >>False 应该是真的 如何在不更改型号的情况下编写自定义订单? 我看到了,但它只适用于聚合函数。 注意:我需要订购的解决方案,而不是列表过滤器,我已经有了答案。我将查找更改如下: 下面是我如何解决这个问题的:

我有一个模型的版本字段,一个字符串字段。我通过该字段(“-version”)定义了Django管理员排序
问题是python的版本比较在字符串方面不起作用。例如:

vers=['5.10.0.','5.9.0','5.8.0']
vers[0]>vers[1]
>>False
应该是真的

如何在不更改型号的情况下编写自定义订单?
我看到了,但它只适用于聚合函数。

注意:我需要订购的解决方案,而不是列表过滤器,我已经有了答案。我将查找更改如下:


下面是我如何解决这个问题的:

class MyModelAdmin(admin.ModelAdmin):

    def get_queryset(self, request):
        qs = super(MyModelAdmin, self).get_queryset(request)
        qs = qs.extra(select={'nversion': "string_to_array(version, '.')::bigint[]"}).order_by('-nversion')
        return qs

    def vers(self, obj):
        return obj.nversion

    ordering = ('-nversion',)

下面是我如何解决这个问题的:

class MyModelAdmin(admin.ModelAdmin):

    def get_queryset(self, request):
        qs = super(MyModelAdmin, self).get_queryset(request)
        qs = qs.extra(select={'nversion': "string_to_array(version, '.')::bigint[]"}).order_by('-nversion')
        return qs

    def vers(self, obj):
        return obj.nversion

    ordering = ('-nversion',)

我认为这在django admin中是不可能的。排序取决于模型字段及其值之间的标准比较。使用如此复杂的比较无法应用排序。我认为这在django管理中是不可能的。排序取决于模型字段及其值之间的标准比较。使用如此复杂的比较无法应用排序。