Django admin: Как изменить порядок list_filter?
У меня есть набор данных с моделями, которые показывают год. Мне нужно сделать обратный порядок. По умолчанию интерфейс администратора Django показывает год в порядке возрастания значения числа (например, 2021
, 2022
и т.д.). Я хочу, чтобы фильтр отображал 2022
, 2021
,
models.py
...
def model(models.Model):
year = models.IntegerField()
admin.py
...
class ModelAdmin(admin.ModelAdmin):
list_filter = ("year")
Я думаю, что это очень тривиальный вопрос, но я еще не нашел решения. Заранее спасибо.
Полагаю, вы можете попробовать определить значение по умолчанию ordering
в классе модели Meta
:
class YourModel(models.Model):
class Meta:
ordering = ['-year', ]
Если это не работает для вас, единственный вариант для вас - использовать custom filter вот так:
from django.utils.translation import ugettext_lazy as _
from django.contrib.admin import SimpleListFilter
class YearFilter(SimpleListFilter):
title = _('year')
parameter_name = 'year'
def lookups(self, request, model_admin):
qs = model_admin.queryset(request)
return [(i, i) for i in qs.values_list('year', flat=True) \
.distinct().order_by('-year')]
def queryset(self, request, queryset):
if self.value():
return queryset.filter(year__exact=self.value())
class ModelAdmin(admin.ModelAdmin):
list_filter = (YearFilter,)
вы можете просто использовать order_by и обратный порядок. например, какой-нибудь шаблон вроде этого:
records=yourmodel.objects.filter(x=y).order_by('year').reverse