Django后台admin简单注册, 自定义admin优化,ModelAdmin属性讲解。

这篇博客主要介绍关于django后台admin管理系统的介绍, 简单注册 以及自定义 admin后台优化, 以及 ModelAdmin常用的属性讲解 。

工具: pycharm 2020:
<django 从入门到 放弃> 第四篇
沙漏在下雨

本专栏介绍了我是怎么从Django入门到放弃, 基本的有,复杂的也有,项目我会自己花钱去上培训班分享给大家。一起学习吧! 这是我第一次出系列教程,不足之处,请多多指教, 一名大三备考研党!


为什么要有Django后台管理系统:

  1. ​ 我们知道,Web 站点上某些内容的改动是后台管理员来完成的,如果什么东西都是管理员直接用 Shell 或者 SQL 语句来修改,不仅麻烦,而且容易操作失误,从而导致数据不一致的结果。假如是一个不懂编程的人呢?应该怎么去操作呢?上述问题,说明了构建一个后台管理系统的重要性,通过后台管理系统为管理员提供一种便捷有效的操作方式。

  2. ​ 后台管理系统主要是对数据表的存储做专门的管理,例如针对微博或者论坛类的站点,管理员需要删除不合规的文章,或者公司内部需要发布新的话题等,这些都是通过数据表的管理实现的。单一功能的后台系统比较容易构建,但是如果功能增多情况下,就需要对多个数据表做管理,这就增加了开发人员的重复性工作。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 可以设置多个值, 这个是没有关系的,但是这里要注意二点

  1. 要设置 list_display_links 字段 就一定要设置 list_display
  2. 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入门到放弃, 基本的有,复杂的也有,项目我会自己花钱去上培训班分享给大家。一起学习吧! 这是我第一次出系列教程,不足之处,请多多指教, 一名大三备考研党!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值