Django的admin相关
自定义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相关的更多相关文章
- 08/27 Django admin相关
一.django-admin的简单回顾: admin: Django的后台数据管理的web版本 1.admin a:models.py - 创建表 b:admin.py - 注册表 admin. ...
- 【django之admin,单例模式】
一.admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTAL ...
- Django之admin的使用和源码剖析
admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLE ...
- Django 之 admin管理工具
-------------------------------------------------------------------------妄尝恶果,苦果自来. admin组件使用 Django ...
- stark组件之过滤操作【模仿Django的admin】
一.先看下django的admin是如何实现过滤操作 首先在配置类中顶一个list_filter的列表,把要过滤的字段作为元素写i进去就可以了 class testbook(admin.ModelAd ...
- stark组件之路由分发【模仿Django的admin】
一.先看下django的admin是如何进行路由分发的 1.先看下django的admin的url路径有哪些 其实很简单,假如有一个书籍表,那么每张表对应四个url,增.删.改.查 查看的url ht ...
- django 用户管理相关的表
Django 用户管理相关的表: create table django_content_type ( /* 内容类型表 */ id ) not null auto_increment, app_la ...
- django之admin设置
Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸索总结出比较实用的配置.若你有什么比较好的配置 ...
- django中admin的使用
转载网址:https://www.cnblogs.com/wumingxiaoyao/p/6928297.html Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理 ...
随机推荐
- Fiddler使用总结(转载)
原文地址:https://www.cnblogs.com/yyhh/p/5140852.html 序章 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存 ...
- C#的抽象类和接口,区别与相似
一.抽象类:抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们 ...
- Python实现bp神经网络识别MNIST数据集
title: "Python实现bp神经网络识别MNIST数据集" date: 2018-06-18T14:01:49+08:00 tags: [""] cat ...
- CentOS 7 Nginx1.12.2平滑升级到新版本nginx-1.13.3
查看当前Nginx版本信息 [root@web ~]# /usr/local/nginx/sbin/nginx -V nginx version: nginx/ built by gcc (Red H ...
- platform怎么实现数据数据和驱动分离
一些重要的结构体: struct platform_device { const char * name; int id; struct device dev; u32 num_resources; ...
- SpringCloud入门之应用程序上下文服务(Spring Cloud Context)详解
构建分布式系统非常复杂且容易出错.Spring Cloud为最常见的分布式系统模式提供了简单易用的编程模型,帮助开发人员构建弹性,可靠和协调的应用程序.Spring Cloud构建于Spring Bo ...
- redis知识点汇总
1. redis是什么 2. 为什么用redis 3. redis 数据结构 4. redis中的对象类型 5. redis都能做什么?怎么实现的的? 6. redis使用过程中需要注意什么 7. 数 ...
- python 2 和 python 3 的区别
p2:重复代码语言不统一不支持中文input() 输入数字 获取数字输入字符串必须自己手动写引号raw_input 和p3中的 input 一样print可以加括号 也可以不加括号p2 中除法获取到的 ...
- 用户和用户组y哦不过y哦那个好
一.用户和用户组的简介? 介绍:https://blog.csdn.net/Na2Co3_Ren/article/details/74502309 二.用户可以分为3类? 1.主人:所有者的名字 2. ...
- 利用策略模式实现了同一接口的多个Servicel实现类,如何同时注入Controller
解决方法如上图,通过给实现类起别名,并在controller中,通过@Qualifier注解获取不同的实现类,之前没有这样写,会出现这样的情况: 通过@autowired注解注入dao层时为空,会报空 ...