如何在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)
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的答案:-)