Django按多个字段管理订单



如何在django管理中按多个字段排序?

感谢

试试这个:

在您的型号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#!主题/django用户/PvjClVVgD-s

直到django 1.4(目前在alpha中),django管理员只按Meta ordering中的第一列排序。您可以通过重写queryset:来解决这个问题

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

关于上面用户535010的回复:我很挣扎,因为添加了建议的代码后,我再也无法通过单击管理列表视图中的标题来排序字段了。我修改了为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)
Django模型管理员在Django 2.0+中支持按多个值排序
class MyAdmin(admin.ModelAdmin):
    ordering = ['last_name', 'first_name']

使点击排序与多列排序修复一起工作所需的功能是:

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

另一种方法是jenniwren的答案:-)

最新更新