注册Model

  1. from django.contrib import admin
  2. @admin.register(Article)
  3. class ArticleAdmin(admin.ModelAdmin):
  4. # 列表页显示的字段
  5. list_display = ['id', 'title', 'category', 'create_time']
  6. # 搜索字段
  7. search_fields = ['title']
  8. # 过滤器字段
  9. list_filter = ['category']
  10. # 排除字段
  11. exclude = ['read']
  12. # 列表页面连接字段
  13. list_display_links = ['id', 'title']
  14. # 排序
  15. ordering = ['-id']
  16. # 指定Form
  17. form = ArticleForm
  18. fields = ('title', ('reader', 'url')) # form显示字段 (同一行显示)

添加自定义字段

  1. from django.contrib import admin
  2. @admin.register(Category)
  3. class CategoryAdmin(admin.ModelAdmin):
  4. list_display = ['id', 'title', 'parent', 'ico_img']
  5. readonly_fields = ['ico_img']
  6. list_display_links = ['id', 'title']
  7. ordering = ['id']
  8. def ico_img(self, obj):
  9. if obj.ico:
  10. return mark_safe('<img src="%s" width="30px" />' % obj.ico.url)
  11. ico_img.short_description = '图标显示'

自定义过滤器

使用字段过滤器

  1. from django.contrib import admin
  2. from django.utils.translation import gettext_lazy as _
  3. class ArticleFilter(admin.SimpleListFilter):
  4. title = _('分类') # 过滤器的显示名字
  5. parameter_name = 'category' # url显示的参数名
  6. def lookups(self, request, model_admin):
  7. """
  8. 必须重写的方法
  9. 返回list 或 tuple
  10. (('值', '显示名字'), ...)
  11. """
  12. print(request)
  13. print(model_admin)
  14. pid_list = []
  15. res = Category.objects.filter(parent__isnull=False).values_list('parent_id')
  16. if res:
  17. pid_list = list(zip(*res))[0]
  18. f_list = Category.objects.exclude(id__in=pid_list).values_list('id', 'title')
  19. return f_list
  20. def queryset(self, request, queryset):
  21. """
  22. 必须重写的方法
  23. 返回过滤后的querset
  24. self.value() 用户选择的过滤器的值
  25. 不返回则所有数据
  26. """
  27. if self.value():
  28. return queryset.filter(category=self.value())