自定义admin展示的内容

根据之前已经创建好了的models

from django.db import models
class Person(models.Model):
name = models.CharField(max_length=64, unique=True)
age = models.IntegerField()
birthday = models.DateField()
gender_choices = ((u'male', '男'), (u'female', '女'))
gender = models.CharField(max_length=6, choices=gender_choices, default='male')
blog_url = models.URLField(verbose_name="网址")
email = models.EmailField(help_text="写入一个类似123@qq.com的格式")
host = models.GenericIPAddressField(null=True, blank=True)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = '个人信息'

models.py

配置admin.py,自定义要展示的内容

  • 第一种:通过继承ModelAdmin类来定义admin里的内容。ModelAdmin类是admin接口中model的表现形式
from django.contrib import admin
from .models import Person
class Person_Display(admin.ModelAdmin):
list_display = ("name", "birthday", "gender", "blog_url", "email", "host") # 要显示的字段
admin.site.register(Person, Person_Display)
  • 第二种:也可以使用@admin.register装饰器注册ModelAdmin
from django.contrib import admin
from .models import Person @admin.register(Person)
class Person_Display(admin.ModelAdmin):
list_display = ("name", "birthday", "gender", "blog_url", "email", "host")

查看admin:

 

list_display    控制admin的更改列表页面上显示的字段。如果没有设置list_display,只显示一列,显示__str__()的对象。

特殊情况:

  •  如果字段是 ForeignKey,将显示__str__的对象
  •  不支持 ManyToManyField 类型
  • 可以调用models里面类的方法。将默认HTML转义输出,要使html格式生效,需要使用format_html()。 通过short_description 可以给models类的方法加上名字。

例如: # models.py

from django.db import models
from django.utils.html import format_html class Person(models.Model):
.........
gender_choices = (('male', '男'), ('female', '女'))
gender = models.CharField(max_length=6, choices=gender_choices, default='male')
def colored_gender(self):
if self.gender == 'male':
return format_html('<span style="color: green;">男生</span>')
else:
return format_html('<span style="color: red;">女生</span>')
colored_gender.short_description = "性别" #可以通过添加short_description属性来自定义列的标题

# admin.py

from django.contrib import admin
from .models import Person @admin.register(Person)
class Person_Display(admin.ModelAdmin):
list_display = ("name", "birthday", "blog_url", "email", "host", "colored_gender",)

list_editable   允许在列表页面上对字段进行编辑

list_filter      激活admin列表页面右侧边栏中的过滤器。

list_per_page   一页显示的项目数,默认为100

ordering         排序,字段前面加一个- ,表示倒序

search_fields    启用列表页面上的搜索框。如果有外键或者多对多关联,可以通过foreignkey__fieldname搜索。

例如 student 列表里,search_fields = ('school__name',)。可以可以通过学校名字搜索学生条目。

示例:

from django.contrib import admin
from .models import Person
@admin.register(Person)
class Person_Display(admin.ModelAdmin):
list_display = ( "name", "birthday", "blog_url", "email", "host", "colored_gender",) #展示的字段
list_editable = ('blog_url', ) # 可以在列表页面编辑
list_filter = ("name", "birthday") #右边导航栏的过滤器
list_per_page = 3 #一页显示的条目
ordering = ["-birthday", ] #按生日倒序
search_fields = ["name", ] # 搜索栏

修改一条对象里面的显示内容:

filter_horizontal(多对多)  默认在admin某一个对象管理里面,ManyToMany显示为一个多选框。
                                    增加此选项,允许在选项内进行搜索。未选中和选定的选项并排显示在两个框中。

例如   在student  设置filter_horizontal = ( 'teacher',)

------------------》

filter_vertical  与filter_horizontal相同,不过是竖排。

raw_id_fields(外键)   默认ForeignKey字段是一个选择框,为了减小开销,可以将其改为选择一个窗口小部件选择。

      ---------》

弹出小窗

更多参考:  https://docs.djangoproject.com/en/2.1/ref/contrib/admin/

添加Admin Action

如果要同时对许多对象进行相同的更改,那么可以定制admin action,批量操作列表里的对象。

例如,将学生里未注册的全部改为已注册。

# models.py

from django.db import models
from django.utils.html import format_html
class Student(models.Model):
sname = models.CharField(max_length=64)
age = models.IntegerField()
statu_choices = (('registered', u'已注册'),
('unregister', u'未注册'),
)
status = models.CharField(choices=statu_choices, max_length=32, default='unregister')
def __str__(self):
return self.sname
def status_color(self):
if self.status == 'registered':
f = format_html( '<span style="padding:2px;background-color:green;">已注册</span>')
else:
f = format_html('<span style="padding:2px;background-color:red;">未注册</span>')
return f
status_color.short_description = 'status'

# admin.py

def make_register(modelAdmin, request, queryset): #action函数
queryset.update(status='registered') # 修改字段
make_register.short_description = 'Make register' # 动作描述

@admin.register(Student)
class Student_More_Info(admin.ModelAdmin):
actions = [make_register] #添加动作

1, 写动作函数。我们需要编写一个在从admin触发操作时调用的函数。 Action函数只是带有三个参数的常规函数​​:

当前ModelAdmin,一个HttpRequest表示当前请求,QuerySet包含用户选择的一组对象。

 2,添加动作    action=[]

action高级写法:将action作为ModelAdmin的方法

因为action和Person对象是紧密耦合的,所以可以将action放到Person_display对象中:

from django.contrib import admin
from .models import Person
@admin.register(Person)
class Person_Display(admin.ModelAdmin):
actions = ['change_gender', ] # action列表里面是字符串,而不是函数
def change_gender(self, request, queryset): # modeladmin参数改为self
queryset.update(gender='female')
change_gender.short_description = "Mark selected person as female ^_^~"

Django的admin相关的更多相关文章

  1. 08/27 Django admin相关

    一.django-admin的简单回顾: admin: Django的后台数据管理的web版本 1.admin a:models.py - 创建表 b:admin.py - 注册表    admin. ...

  2. 【django之admin,单例模式】

    一.admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTAL ...

  3. Django之admin的使用和源码剖析

    admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLE ...

  4. Django 之 admin管理工具

    -------------------------------------------------------------------------妄尝恶果,苦果自来. admin组件使用 Django ...

  5. stark组件之过滤操作【模仿Django的admin】

    一.先看下django的admin是如何实现过滤操作 首先在配置类中顶一个list_filter的列表,把要过滤的字段作为元素写i进去就可以了 class testbook(admin.ModelAd ...

  6. stark组件之路由分发【模仿Django的admin】

    一.先看下django的admin是如何进行路由分发的 1.先看下django的admin的url路径有哪些 其实很简单,假如有一个书籍表,那么每张表对应四个url,增.删.改.查 查看的url ht ...

  7. django 用户管理相关的表

    Django 用户管理相关的表: create table django_content_type ( /* 内容类型表 */ id ) not null auto_increment, app_la ...

  8. django之admin设置

    Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸索总结出比较实用的配置.若你有什么比较好的配置 ...

  9. django中admin的使用

    转载网址:https://www.cnblogs.com/wumingxiaoyao/p/6928297.html     Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理 ...

随机推荐

  1. linux 中的 vim 设置粘贴板

    https://blog.csdn.net/zhangxiao93/article/details/53677764 亲测有效

  2. 【JavaScript】DOM和BOM之我的理解

    2018年12月17日 一.我们能够对html文档和浏览器做的操作 (一)html文档 增.删.改.可以在html中增加.删除.改动元素 (二)浏览器 地址栏:输入.修改地址 历史记录:前进.后退.跳 ...

  3. pycharm 打开json 文件 \2 自动成了转义字符

    打开json 文件 \2 自动成了转义字符 暂时只发现在( \2 ) \ 后面为数字的情况下会出现转义json 文件为是指:在pycharm 中新建 file 后缀为json的文件 如: 1234.j ...

  4. 【SparkStreaming学习之一】 SparkStreaming初识

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

  5. springmvc <mvc:default-servlet-handler/> & <mvc:annotation-driven>

    1. mvc 标签内部加载的基础类: 1). <mvc:view-controller> 1 org.springframework.web.servlet.handler.SimpleU ...

  6. vuejs简单介绍特点

    官网:https://cn.vuejs.org/ vue是一个渐进式的框架, 是一个轻量级的框架, 也不算是一个框架, 他核心只关注图层, 是一个构建数据驱动的web界面,易于上手, 还便于于第三方库 ...

  7. go语言开发教程之web项目开发实战

    Golang介绍Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件 ...

  8. 《CSS世界》读书笔记(十五)

    <!-- <CSS世界>张鑫旭著 --> 字母x——CSS世界中隐匿的举足轻重的角色 在各种内联相关模型中,凡是涉及垂直方向的排版或者对齐的,都离不开最基本的基线(baseli ...

  9. 使用特性将数据库返回的datatable转换成对象列表

    public class ColumnMapAttribute : Attribute { private readonly string _name; public ColumnMapAttribu ...

  10. CentOS 7安装mysql(rpm)

    1.检查是否安装了mysql rpm -qa|grep -i mysql centos7默认是安装的mariadb,而安装mysql的话会和mariadb的文件冲突,所以需要先卸载掉mariadb 2 ...