一、后台管理系统配置


1 在该表对应的models类里面添加一个Meta类

  1. class Meta:
  2. verbose_name_plural = '用户表' #指定该表在admin后台的名字为:用户表 

2 null=True,blank=True的区别

  1. # null=True: 是告诉数据库该字段可以为空,admin后台默认还是不允许为空
  2. # blank=True: admin 后台该字段可以为空
  3. phone = models.CharField(max_length = 11, blank = True, null = True, unique = True, verbose_name = "手机号")

3 settings.py配置,使django的后台管理页面变成中文、设置时区

  1. # Internationalization
  2. # https://docs.djangoproject.com/en/3.2/topics/i18n/
  3. LANGUAGE_CODE = 'zh-hans'
  4. TIME_ZONE = 'Asia/Shanghai'
  5. USE_I18N = True
  6. USE_L10N = True
  7. USE_TZ = False

二、ModelAdmin的常用属性


1 注册表

在admin.py中只需要 Mode 中的某个类注册,即可在 Admin 中实现增删改查的功能。

  1. from django.contrib import admin
  2. from app import models
  3. # Register your models here.
  4. admin.site.register(models.UserInfo)
  5. admin.site.register(models.Blog)

注册完后点击表名即可修改表内容。

2 list_display 字段展示

  • list_display:列表时,定制显示的列。
  • 在默认的情况下,Model 在 admin 列表修改页(Admin ChangeList)只会显示一列,内容是实例对象的__str__的返回值,如果想要多现实一些列的数据,就可以通过 list_display 属性来实现。
  • 它除了可以配置 Model 的字段名之外,还可以接收函数,且这个函数将一个 Model 实例对象作为参数,这个函数也需定义在 ModeAdmin 中。语法格式如下:list_display=[]
  • 在使用 list_display 时需要特别注意它的两个特性
  • 对于 Foreignkey 类型的字段,显示的是 obj.__str__() 返回的值。
  • 不支持 ManyToManyField 类型的字段,如果需要展示,可以用自定义方法实现。
  1. # 方式一
  2. class UserInfoAdmin(admin.ModelAdmin):
  3. list_display = ('username', 'email',)
  4. admin.site.register(models.UserInfo, UserInfoAdmin)
  5. # 方式二
  6. @admin.register(models.UserInfo)
  7. class UserInfoAdmin(admin.ModelAdmin):
  8. list_display = ('username', 'email',)

3 list_display_links 链接至列表页面,可以点击跳转。

  • 使用 list_display_links 可以控制 list_display 中的字段是否应该链接到对象的“更改”页面。默认情况下,更改列表页面会只将第一列链接到每个项目的更改页面。它的使用格式和 list_display 相同,是列表或者元组类型。

  • 同时它也可以指定一个或多个字段。只要这些字段在中 list_display 中存在 ,那么 Django 就不会在意链接了多少个字段。

注意:要使用 list_display_links 这个属性 ,必须先要定义 list_display。

4 list_filter 过滤器

  • 配置 list_filter 属性,可以在 Admin 后台的列表修改页的右侧添加过滤器,且各个过滤条件是 and 的关系。
  • list_filter 是列表或者元组类型,通常使用它会传递两类元素:一个是 Model 的字段名,另一个是继承自以下的类(并不常用):django.contrib.admin.SimpleListFilter
  • 对于 Model 的字段名,字段类型必须属于 BooleanField、CharField、DateField、DateTimeField、IntegerField、ForeignKey 或 ManyToManyField 中的一种。
  • 同样也可以使用双下画线实现跨表关联。示例如下所示:list_filter= ['title', 'pub__pubname']

5  list_editable 设置字段名称

  • 允许模型的字段在列表页面上被编辑,也就是说,它包含的字段将在 list_editable 更改页面上显示为表单窗口小部件,从而允许用户一次编辑和保存多行。

使用 list_editable 时,你应该注意以下规则:

  • list_editable 列表中的每个字段也必须位于 list_display 中。否则你将无法编辑;
  • 同一字段不能同时在 list_editable 和 list_display_links 中显示,因为同一字段只能属于它们两者中的一个。

6 search_fileds 添加搜索框

  • 在一些场景下给某些字段添加搜索框是很有意义的,Django 考虑到这一点提供了 search_fileds 属性,在 Admin 中表现为一个搜索框,查询的字段可以是 CharField 或TextField 类型的。
  • 也可以是对 ForeignKey 或 ManyToManyField 字段类型的引用查询,使用双下画线引用字段名。使用示例如下:search_fields = ['blog__site_name']
  • 对于搜索框中的输入词,Django 会将其分割成多个关键字,并返回所有包含这些关键字的实例对象。

提示:需要注意的是,每个关键字都必须是 search_fields 选项中的至少一个。

7 ordering

  • 列表时,数据排序规则
8 list_per_page
  • 列表分页,显示
9 date_hierarchy
  • 按时间分层 根据时间筛选表格
10 empty_value_display
  • 列数据为空时,显示默认值
  1. class UserInfoAdmin(admin.ModelAdmin):
  2. # 排序
  3. # ordering = ('nid',)
  4. # 倒序
  5. ordering = ('-nid',)
  6. # 显示的字段
  7. list_display = ('nid', 'email', 'create_time', 'phone', 'blog')
  8. # 点击可跳转
  9. list_display_links = ( 'create_time',)
  10. # 过滤器
  11. list_filter = ('email', 'phone', 'blog__site_name')
  12. # 可编辑
  13. list_editable = ('email', )
  14. # 搜索框
  15. search_fields = ['email', 'phone', 'blog__site_name']
  16. # 时间分层
  17. date_hierarchy = 'create_time'
  18. # 分页
  19. list_per_page = 3
  20. # 为空时,显示默认值
  21. empty_value_display = '-empty-'
  22. # 是否显示选择个数
  23. actions_selection_counter = True
  24. # Action选项都是在页面上方显示
  25. actions_on_top = False
  26. # Action选项都是在页面下方显示
  27. actions_on_bottom = True
  28. admin.site.register(models.UserInfo, UserInfoAdmin)
  29. admin.site.register(models.Blog)

 

5 list_select_related 列表时,连表查询是否自动 select_related

Django 之ModelAdmin对象的更多相关文章

  1. django后台管理-ModelAdmin对象

    Django最强大的部分之一是自动生成的管理后台界面. 它从你的模型中读取元数据,以提供一个快速的.以模型为中心的界面,信任的用户可以在这里管理你网站上的内容. 建议管理后台仅作为组织的一个内部管理工 ...

  2. [R]django的HTTPREQUEST对象

    django的HTTPREQUEST对象 via Django使用request和response对象 当请求一张页面时,Django把请求的metadata数据包装成一个HttpRequest对象, ...

  3. Python Web框架篇:Django Model ORM(对象关系映射)

    一,基本操作 用于实现面向对象编程语言里不同类型系统的数据之间的转换,换言之,就是用面向对象的方式去操作数据库的创建表以及增删改查等操作. 1.增(create , save): from app01 ...

  4. django的request对象和response对象

    概述Django 使用 request 和 response 对象表示系统状态数据..当请求一个页面时,Django创建一个 HttpRequest 对象.该对象包含 request 的元数据. 然后 ...

  5. django中request对象详解(转载)

    django中的request对象详解 Request 我们知道当URLconf文件匹配到用户输入的路径后,会调用对应的view函数,并将  HttpRequest对象  作为第一个参数传入该函数. ...

  6. django的model对象转化成dict

    今天发现一个掉渣天的方法,Django的forms包里面有一个方法:model_to_dict(),它可以将一个model对象转化成dict. In [1]: from apps.dormitory. ...

  7. django之HttpRequest对象

    class HttpRequest[source] 属性 所有的属性都是只读的,除非另有说明 HttpRequest.scheme 字符串(http/https)表示http还是https请求 Htt ...

  8. django的HTTPREQUEST对象

    Django使用request和response对象 当请求一张页面时,Django把请求的metadata数据包装成一个HttpRequest对象,然后Django加载合适的view方法,把这个Ht ...

  9. Django将request对象传入模板配置

    对于很多时候,需要从模板中获取很请求中很多内容,比如当前请求的url,当前的session变量中的某个值,这时候我们可以通过配置可将request对象传递进模板. django1.10版本: sett ...

随机推荐

  1. P2183 [国家集训队]【一本通提高组合数学】礼物

    [国家集训队]礼物 题目背景 一年一度的圣诞节快要来到了.每年的圣诞节小 E 都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小 E 心目中的重要性不同,在小 E 心中分量越重的人,收到的礼物会 ...

  2. vscode problem

    1.Inconsistent use of tabs and spaces in indentation 原因:tab和空格键不能同时使用 vs code按住ctrl + p,输入以下内容 >c ...

  3. Jetpack Compose学习(9)——Compose中的列表控件(LazyRow和LazyColumn)

    原文:Jetpack Compose学习(9)--Compose中的列表控件(LazyRow和LazyColumn) - Stars-One的杂货小窝 经过前面的学习,大致上已掌握了compose的基 ...

  4. java学习第二天多态.day09

    接口 接口总结 接口表示一种规约(规范.标准),它里面定义了一些列抽象方法(功能),它可以被多个类实现. 1接口名称首写字母用I,表示一个接口,后命名使用驼峰命名 2.接口中定义的都是抽象方法,所以可 ...

  5. HTTP/3,它来了

    HTTP 3.0 是 HTTP 协议的第三个主要版本,前两个分别是 HTTP 1.0 和 HTTP 2.0 ,但其实 HTTP 1.1 我认为才是真正的 HTTP 1.0. 如果你对 HTTP 1.1 ...

  6. Shell 脚本报错 line x: [xxx: command not found

    [root@VM-0-6-centos sh_scripts]# bash val.sh username: hello world! val.sh: line 5: [hello: command ...

  7. [开源精品] C#.NET im 聊天通讯架构设计 -- FreeIM 支持集群、职责分明、高性能

    FreeIM 是什么? FreeIM 使用 websocket 协议实现简易.高性能(单机支持5万+连接).集群即时通讯组件,支持点对点通讯.群聊通讯.上线下线事件消息等众多实用性功能. ImCore ...

  8. Swagger以及knife4j的基本使用

    Swagger以及knife4j基本使用 目录 Swagger以及knife4j基本使用 Swagger 介绍: Restful 面向资源 SpringBoot使用swagger Knife4j -- ...

  9. javaee相关基础

    2020-2-28 java 学习 开始学习javaee了 瞎跳着看 今日内容 web相关概念 web服务器软件:Tomcat Servlet入门学习 web概念 软件架构 C/S:客户端/服务器端 ...

  10. Centos7中用Docker安装MySQL教程

    第一步 安装Docker 1.1 参考这位博主给出的命令安装好 https://blog.csdn.net/weixin_43423864/article/details/109481260 第二步 ...