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按多个字段排序的主要内容,如果未能解决你的问题,请参考以下文章