Django ModelAdmin

django 配置后台管理界面

Django 的一大特性就是自动生成的后台管理系统,要让自己的 Model 能被编辑,就需要在 admin.py 中注册对应 Model

实用 Cookbook

ModelAdmin

ModelAdmin 类是管理界面中模型的表示,通常在 admin.py 中编写,如果没有显示的修改而是直接注册,就会显示用默认方法表示:

class AuthorAdmin(admin.ModelAdmin):
    pass
admin.site.register(Author, AuthorAdmin)

ModelAdmin 中的属性方法都可以被覆写,用于配置自己的管理界面。

属性

  • actions: 提供的动作列表

  • actions_on_top/bottom: 动作栏在哪里出现

  • empty_value_display: 显示空字段的默认值

  • exclude: 表单中排除的字段

  • fields: 修改页面中包含哪些字段或方法(元组),fields中用()表示同一行应出现的字段

  • fieldsets: 控制管理员添加和修改的布局,它是一个由多个元组组成的列表,每个元组代表一个部分 元组的格式是 (name, field_options) name 可以为 none

    • field_options 作为字典可以有以下键:
      • fields: 要在该部分显示修改的字段,同样用括号括起来表示同一行
      • classes: 包含额外 CSS 类的列表或元组,如 collapse 折叠,wide 更宽
      • description 一个显示在该部分顶部的描述性文字
  • form: 在通常情况下,会为模型动态创建一个 ModelForm,用于创建在页面上显示的表单,也可以提供自己的 form 来添加/更改默认表单,也可以使用 ModelAdmin.get_form() 定制默认的表单。

  • list_display: 用来控制哪些字段在变更列表界面显示,它可接受的对象可以是:

    • 模型字段的名称
    • 一个接受一个参数(模型实例)的可调用对象,会自动把返回值转移为HTML,
from django.contrib import admin
from django.db import models
from django.utils.html import format_html

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    color_code = models.CharField(max_length=6)

    @admin.display
    def colored_name(self):
        return format_html(
            '<span style="color: #{};">{} {}</span>',
            self.color_code,
            self.first_name,
            self.last_name,
        )

class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'colored_name')
- 代表模型属性或方法的字符串
  • list_display_links: 控制 list_display 中的字段是否链接到更改页面。

  • list_filter: 激活过滤器,是一个列表或元组,每个元素可以是:

    • 一个字段名,且该字段可被过滤
    • "__"的跨越查找
    • 自定义filter
  • radio_fields: 将外键由选择框变为勾选

  • autocomplete_fields: 为外键的选择框添加搜索功能,配合search_fields

  • readonly_fields: 只可以读的字段或方法

  • search_fields: 文本字段,当有人在搜索框查询时就会在这些字段查询。

  • 还有一些其他属性不再列出,这里查询

自定义模板

这些属性可以使用自己的管理模板 * add_form_template 添加的模板 * change_form_template 变更的模板 * change_list_template 查看列表的模板 * delete_confirmation_template 删除对象确认界面 * delete_selected_confirmation_template 同上 * object_history_template 历史界面 * popup_response_template 弹出界面

方法