注册Model
from django.contrib import admin@admin.register(Article)class ArticleAdmin(admin.ModelAdmin):# 列表页显示的字段list_display = ['id', 'title', 'category', 'create_time']# 搜索字段search_fields = ['title']# 过滤器字段list_filter = ['category']# 排除字段exclude = ['read']# 列表页面连接字段list_display_links = ['id', 'title']# 排序ordering = ['-id']# 指定Formform = ArticleFormfields = ('title', ('reader', 'url')) # form显示字段 (同一行显示)
添加自定义字段
from django.contrib import admin@admin.register(Category)class CategoryAdmin(admin.ModelAdmin):list_display = ['id', 'title', 'parent', 'ico_img']readonly_fields = ['ico_img']list_display_links = ['id', 'title']ordering = ['id']def ico_img(self, obj):if obj.ico:return mark_safe('<img src="%s" width="30px" />' % obj.ico.url)ico_img.short_description = '图标显示'
自定义过滤器
使用字段过滤器
from django.contrib import adminfrom django.utils.translation import gettext_lazy as _class ArticleFilter(admin.SimpleListFilter):title = _('分类') # 过滤器的显示名字parameter_name = 'category' # url显示的参数名def lookups(self, request, model_admin):"""必须重写的方法返回list 或 tuple(('值', '显示名字'), ...)"""print(request)print(model_admin)pid_list = []res = Category.objects.filter(parent__isnull=False).values_list('parent_id')if res:pid_list = list(zip(*res))[0]f_list = Category.objects.exclude(id__in=pid_list).values_list('id', 'title')return f_listdef queryset(self, request, queryset):"""必须重写的方法返回过滤后的quersetself.value() 用户选择的过滤器的值不返回则所有数据"""if self.value():return queryset.filter(category=self.value())
