这篇博客主要介绍关于django后台admin管理系统的介绍, 简单注册 以及自定义 admin后台优化, 以及 ModelAdmin常用的属性讲解 。
工具: pycharm 2020:
<django 从入门到放弃
> 第四篇
沙漏在下雨本专栏介绍了我是怎么从Django入门到放弃, 基本的有,复杂的也有,项目我会自己花钱去上培训班分享给大家。一起学习吧! 这是我第一次出系列教程,不足之处,请多多指教, 一名大三备考研党!
为什么要有Django后台管理系统:
-
我们知道,Web 站点上某些内容的改动是后台管理员来完成的,如果什么东西都是管理员直接用 Shell 或者 SQL 语句来修改,不仅麻烦,而且容易操作失误,从而导致数据不一致的结果。假如是一个不懂编程的人呢?应该怎么去操作呢?上述问题,说明了构建一个后台管理系统的重要性,通过后台管理系统为管理员提供一种便捷有效的操作方式。
-
后台管理系统主要是对数据表的存储做专门的管理,例如针对微博或者论坛类的站点,管理员需要删除不合规的文章,或者公司内部需要发布新的话题等,这些都是通过数据表的管理实现的。单一功能的后台系统比较容易构建,但是如果功能增多情况下,就需要对多个数据表做管理,这就增加了开发人员的重复性工作。Django 提供的后台管理系统很好的解决了这个问题,以下是后台管理系统主要功能的介绍。
那接下来,我们就来介绍一下关于django的后台管理系统 ——-admin 系统
创建超级用户:
- django的超级用户就是web网站的后台管理员, 首先,我们需要使用命令来创建一个超级用户,如下图:
python manage.py createsuperuser
这样我们就可以通过 域名网址进入到后台管理系统了, 点击链接 http://127.0.0.1:8000/
, 然后在浏览器中输入如图:
这样我们就进入了django的后台管理系统了,可以在里面加入用户和组, 其他的现在这里面什么都没有是很正常的, 因为我们没有在 admin.py 里面进行用户注册, 这个后续文字会提到。
–
模型Model的简单注册:
上文提到,我们在nowapp 中的 model. py 文件中创建了一个model Book, 那怎么把这个模型显示到后台上呢? 这个时候就要借助admin.py 文件了, 这个文件的作用就是模型的注册,打开nowapp 中的 admin.py , 输入如下代码, 完成Book的注册任务, (这个注册是非常简单的, 后续还会更进这个注册的模块, 让这个界面更加美观友好一点。。。)
## admin.py
from django.contrib import admin
# Register your models here.
from nowapp.models import Book, UserInfo, Author
admin.site.register(Book) # 注册一个模型
# admin.site.register([Book, UserInfo, Author]) # 注册多个模型, 使用列表
注册之后, 我们在回到之前的后台界面, 这个时候,我们点击Book就可以进行增加删除操作了。
这样的操作在 Admin 后台管理系统实现了数据表的可视化,通过这个功能我们就可以对数据表进行管理,极大的方便了 Web 站点的管理人员。
自定义 admin 后台优化:
上面,我们简单的介绍了一个关于admin 的简单注册, 成功的把 model 注册到了后台管理系统中, 这个管理系统他是原生的系统, 非常
简陋
,很多功能都是没有的, 为了方便管理员操作后台系统, django既提供了魔术方法 str (前文已经介绍过), 而且还提供了ModelAdmin
类, 让我们自定义后台管理系统, 可以展示我们的后台更加的美观, 以及功能更加强大。 那下面,我们就介绍一下关于 django 的后台优化吧 !
- 注册
from django.contrib import admin
from nowapp.models import Book
# 之前我们是这样注册的
------
admin.site.register(Book)
# 这样注册就直接使用原生的后台系统
# 现在我们这样注册
# 方法一 使用装饰器
@admin.register(Book_Admin)
class Book_Admin(admim.ModelAdmin):
pass
......代码模块........
# 方法二 传入多值
class Book_Admin(admin.ModelAdmin):
pass
....代码模块....
admin.site.register(Book, Book_Admin)
# 其余的model 如果不想优化 就直接注册 可以老办法
admin.site.register([.......])
这二种方式都可以进行注册, 但是只能二选一, 否则就会抛出异常。我个人喜欢使用装饰器,
ModelAdmin 常用属性 实例:
- 关于 ModelAdmin 的属性是很多的, 但是实际开发中, 我们只需要记住几个就可以, 剩下的需要就翻阅吧。 这里我们给出 ModelAdmin 的一段源码:
# ModelAdmin.py
class ModelAdmin(BaseModelAdmin):
"""Encapsulate all admin options and functionality for a given model."""
list_display = ('__str__',)
list_display_links = ()
list_filter = ()
list_select_related = False
list_per_page = 100
list_max_show_all = 200
list_editable = ()
search_fields = ()
date_hierarchy = None
save_as = False
save_as_continue = True
save_on_top = False
paginator = Paginator
preserve_filters = True
inlines = []
# Custom templates (designed to be over-ridden in subclasses)
add_form_template = None
change_form_template = None
change_list_template = None
delete_confirmation_template = None
delete_selected_confirmation_template = None
object_history_template = None
popup_response_template = None
# Actions
actions = []
action_form = helpers.ActionForm
actions_on_top = True
actions_on_bottom = False
actions_selection_counter = True
checks_class = ModelAdminChecks
如上是关于 ModelAdmin 源码属性。 阅读源码这个是必须的, 但看不看得懂这就是另外一件事情了。 不过没事的, 我们只需要联系一下常用的字段就可以了,
1- list_display 字段展示
在我们没有设置之前,打开后台管理系统, 一般我们都是可以看得到一列的数据, 比如:
这里就是 名字: xx 这样的, 之所以是这样的,是因为我们在 Author 的表中设置了魔术方法 def str() : 它会显示你当前设置的值,对应的我也是这样设置的:
# models.py
def __str__(self):
return f"姓名: {self.name}"
通过这个魔术方法, 我们可以选择后台显示的字段名称, 或者在 ModelAdmin的类下面使用 list_display 同样也可以达到这个效果。
比如:
@admin.register(Book)
class Book_admin(admin.ModelAdmin):
list_display = ['title', 'price', 'public']
这样就只会显示这三个字段了。
在使用 list_display 时需要特别注意它的两个特性:
- 对于 Foreignkey 类型的字段,显示的是 obj.str() 返回的值。
- 不支持 ManyToManyField 类型的字段,如果需要展示,可以用自定义方法实现。
不过,如果要添加其他非字段描述, 还是应该使用 魔术方法 str , 这样效果更赞一点。
2- search_fields 添加搜索框
任何地方都离不开搜索功能, 至少我是这么认为的, 数据越多,越需要检索。 所以,添加这个功能是非常有必要的, django 也是这样想的, 实际作用就是在界面中添加传入参数的搜索框功能, 传入的参数可以是 CharField 或者 TextField , 如果是外键 ForeginKey 或者 多对多 ManyToManyField 字段类型的引用查询,还需要使用双下划线来引用字段 (关于这二个字段, 我还没介绍到, 后面讲。。。。 但是这里要提一提)
比如, 我们给出实例:
@admin.register(Book)
class Book_admin(admin.ModelAdmin):
search_fields = ['title', ] # 搜索框
对应的,打开页面,左上角就会有一个搜索框, 这里就偷个懒不截图了。
因为 search_fields 中的参数是可以多值输入的, 所以我们在搜索框中的关键词, django会自动划分成为小关键词, 通过这些小关键词, 如果找到了, 那就会返回实例对象, 这里有个要求,你输入的关键词至少要有一项是 search_field 中的一参数
3- ordering 添加排序
代码如下:
@admin.register(Book)
class Book_admin(admin.ModelAdmin):
ordering = ['price', ]
就是使用 ordering 加入参数
1. 参数可以加入多个, 排序比较先按照第一个排序, 如果有一样的, 依次按下一个排序
2. 默认排序是从小到大, 如果要逆序, 需要往关键词前面加一个 - 比如 -price
则表示逆序
4- list_filter 添加过滤器
配置 list_filter 属性,可以在 Admin 后台的列表修改页的右侧添加过滤器,且各个过滤条件是 and 的关系。
list_filter 接受的是列表或者元组类型, 一般来说, 会接受一个 Model 的字段名称, 还有一个是继承类(没啥用), 使用方法如下:
@admin.register(Book)
class Book_admin(admin.ModelAdmin):
list_filter = ['title', 'price'] # 过滤器
设置在后台打开,就可以看到我们设置的列表过滤器了。
这里有一个要求,对于 Model 的字段名,字段类型必须属于 BooleanField、CharField、DateField、DateTimeField、IntegerField、ForeignKey 或 ManyToManyField 中的一种。同样也可以使用双下画线实现跨表关联。如下图所示:
list_filter = ["title", "pub__name"]
# pub__name 表示的是 Pub 表中的name属性, 实现跨表查询
5- raw_id_fileds 优化数据库检索
这个主要用来多表查询和外键查询上
raw_id_fields 是一个元组或者列表,其中包含的每一个字段必须是 ForeignKey 或 ManyToManyField 类型。Django 对于其中的每一个字段会以输入框的形式展现,用于输入关联 Model 实例的主键,对于 ManyToManyField 类型,则需要用逗号分隔主键。
除了与默认前端展现样式上的不同之外,Django 不会再去检索所有的关联 Model 实例,而是把这个操作留给了用户,让用户决定是否需要查询。
6- list_display_links 链接至列表页面
我们设置 list_display_links 就可以让 list_display 中的字段选择是否连接到可以修改它的属性页面,意识就是 设置了这个参数, 那么我们直接点击这个参数,就可以跳转到修改页面, 没设置的参数,就不能通过点击的方式跳转修改, 默认情况下, list_display_list 会自动连接到 list_display 的第一个参数, 就是第一个字段默认可以点击跳转修改,其他的就要设置这个值, 传入的值和 list_display 是一样的, 元组或者列表。
list_display 可以设置多个值, 这个是没有关系的,但是这里要注意二点
- 要设置 list_display_links 字段 就一定要设置 list_display
- list_display_links 中的字段, 不能同时出现在 list_display 和 list_editable 里面 (下面讲list_editable)
list_display_links = ["publish", "numbers"]
7- list_editable 设置字段可以页面修改
之前我们没有设置的时候, 就需要点击详情页进行更改吧, 但是我们设置这个之后,后台就可以运行模型的字段在页面上就直接修改了, 达到非常便利的方式, 这里必须给一个图:
设置如下:
list_editable = ["publish"]
就是可以直接在页面上进行修改。
这里要注意:
- list_editable 列表中的每个字段也必须位于 list_display 中。否则你将无法编辑;
- 同一字段不能同时在 list_editable 和 list_display_links 中显示,因为同一字段只能属于它们两者中的一个。
以上就是关于常见的 ModelAdmin 属性了, 如果需要的,可以翻阅官网文档:
https://docs.djangoproject.com/en/3.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display
这篇博客主要介绍关于django后台admin管理系统的介绍, 简单注册 以及自定义 admin后台优化, 以及 ModelAdmin常用的属性讲解 。
工具: pycharm 2020:
<django 从入门到放弃
> 第四篇
沙漏在下雨本专栏介绍了我是怎么从Django入门到放弃, 基本的有,复杂的也有,项目我会自己花钱去上培训班分享给大家。一起学习吧! 这是我第一次出系列教程,不足之处,请多多指教, 一名大三备考研党!