Django-admin按多个字段排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django-admin按多个字段排序相关的知识,希望对你有一定的参考价值。

如何通过django-admin中的多个字段进行排序?

谢谢

答案

试试这个:

在您的模型中设置排序Meta

class Meta:
    ordering = ["some_field", "other_field"]

并在admin.py中添加此类:

from django.contrib.admin.views.main import ChangeList

class SpecialOrderingChangeList(ChangeList): 
    """ 
     Django 1.3 ordering problem workaround 
     from 1.4 it's enough to use `ordering` variable 
    """ 
    def get_query_set(self): 
        queryset = super(SpecialOrderingChangeList, self).get_query_set() 
        return queryset.order_by(*self.model._meta.ordering) 

admin.ModelAdmin中添加此方法

def get_changelist(self, request, **kwargs): 
    return SpecialOrderingChangeList

来源:https://groups.google.com/forum/?fromgroups#!topic/django-users/PvjClVVgD-s

另一答案

直到django 1.4(目前在阿尔法)django管理员只在Meta ordering的第一列订购。您可以通过覆盖查询集来解决此问题:

class MyAdmin(admin.ModelAdmin):
    def queryset(self, request):
        qs = super(MyAdmin, self).queryset(request)
        qs = qs.order_by('last_name', 'first_name')
        return qs 
另一答案

继上面的user535010的回复:我挣扎,因为在添加建议的代码后,我再也无法通过点击管理列表视图中的标题来订购字段。我修改了为MyModelAdmin建议的get_changelist方法,如下所示:

def get_changelist(self, request, **kwargs):  #ordering issue in 1.3 workaround
    try:
        if not request.GET['o']:
            return SpecialOrderingChangeList
    except KeyError:
        pass
    return super(MyModelAdmin, self).get_changelist(request)
另一答案

使用多列排序修复进行点击排序所需的功能如下:

    def get_changelist(self, request, **kwargs): 
        try:
            if request.GET['o']:
                return super(ModelAdmin, self).get_changelist(request)
        except KeyError:
            pass
        return SpecialOrderingChangeList

其他方式回到jenniwren的答案:-)

另一答案

Django模型管理员支持Django 2.0+中的多个值排序。您现在可以像这样使用它:

class MyAdmin(admin.ModelAdmin):
    ordering = ['last_name', 'first_name']

以上是关于Django-admin按多个字段排序的主要内容,如果未能解决你的问题,请参考以下文章

在 Solr 中按特定顺序按多个字段排序

如何按多个字段对对象数组进行排序?

如何按 Grails 中的多个字段排序?

用SQL查询分析器查询时怎么把一个字段用“”分割成多个?

如何在 mongoDb 中按多个字段排序

按多个字段排序列表(C#)? [复制]