簡體   English   中英

Django管理員:自定義排序

[英]Django admin: Custom ordering

我有一個模型的版本字段,一個字符串字段。 我通過該字段(“ -version”)定義了Django管理員排序。
問題是當涉及到字符串時,python的版本比較不起作用。 例如:

vers=['5.10.0.','5.9.0','5.8.0']
vers[0]>vers[1]
>>False

應該是真的

如何編寫自定義訂購而不更改模型?
我看到了這個問題 ,但它僅適用於聚合函數。

注意:我需要排序的解決方案,而不是list_filter ,這里已經有答案 我將查找更改如下:

def lookups(self, request, model_admin):
    qs = model_admin.queryset(request)
    vers = qs.values_list('version', flat=True).distinct().order_by('-version')
    s_vers = [tuple([int(x) for x in n.split('.')]) for n in vers]
    s_vers = sorted(s_vers, reverse=True)
    ns_vers = ['.'.join(map(str, x)) for x in s_vers]
    ret_vers = []

    for v in ns_vers:
        ret_vers.append((v, v))

    return ret_vers

這是我解決的方法:

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',)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM