外观
ModelAdmin.list_filter
list_filter属性用于激活修改列表的右侧边栏,并对列表元素进行过滤。list_filter必须是一个元组或列表,其元素类型可以是字段名或django.contrib.admin.SimpleListFilter。
- 设置字段名
字段必须是BooleanFIeld、CharField、DateField、DateTimeField、IntegerField、ForeignKey或者ManyToManyFIeld中的一种。
class ArticleAdmin(admin.ModelAdmin):
list_filter = ('title',)
也可以使用双下画线进行跨表关联,如根据User模型的username条件过滤。
class ArticleAdmin(admin.ModelAdmin):
list_filter = ('title','user__username')
- 继承django.contrib.admin.SimpleListFilter类
继承此类后,需要提供title和parameter_name的值,并重写lookups()和queryset()方法:
class PublishYearFilter(admin.SimpleListFilter):
title = _('发布年份')
parameter_name = 'year'
def lookups(self, request, model_admin):
return (('2020', _('2020年')), ('2019', _('2019')))
def queryset(self, request, queryset):
if self.value() == '2019':
return queryset.filter(publish_time__gte=date(2019, 1, 1),
publish_time__lte=date(2019, 12, 31))
if self.value() == '2020':
return queryset.filter(publish_time__gte=date(2020, 1, 1),
publish_time__lte=date(2020, 12, 31))
class ArticleAdmin(admin.NodelAdmin):
list_filter = ('title', 'user__username', PublishYearFilter)