Python Django 后台管理之后台模型属性详解


Posted in Python onApril 25, 2021

十八、Django 后台模型属性篇

继续在之前的项目中进行代码的编码,首先要回忆一下通过 createsuperuser 命令创建的管理员账号,如果忘记了,需要重新创建一个。

本篇博客涉及的代码都在 admin.py 文件中,如果你首次打开本篇文章,请翻看本文结尾出的目录大纲,可以再次学习。

为了便于学习,提前在 models.py 中新增一个类,代码如下:

from django.db import models

class MyCenter(models.Model):
    pass

18.1 在 admin 中注册模型

为了让 Django 能对 models.py 文件中的类进行管理操作,需要先注册模型。

把上文提及的 MyCenter 模型进行注册,此时 admin.py 文件的代码如下:

from django.contrib import admin
from .models import MyCenter

class MyCenterAdmin(admin.ModelAdmin):
    pass

admin.site.register(MyCenter, MyCenterAdmin)

注册成功的结果就是在后台页面,可以看到对模型的操作入口。

Python Django 后台管理之后台模型属性详解

其它注册方式
因为上述 MyCenterAdmin 没有实现任何功能,所以可以省略掉。修改代码如下:

from django.contrib import admin
from .models import MyCenter

admin.site.register(MyCenter)

同样可以使用装饰器达到相同的效果。

from django.contrib import admin
from .models import MyCenter


@admin.register(MyCenter)
class MyCenterAdmin(admin.ModelAdmin):
    pass

18.2 Model.Admin 类提供的属性

在上文你已经看到了,admin.py 文件中的类默认继承自 Model.Admin,既然继承自它,那接下来要掌握的就是它给我们提供的属性内容了。

工作开始前,我们先将 admin.py 文件中的代码进行修改,主要为了便于页面展示。

models.py

from django.db import models
from django.contrib.auth.models import User

class Customer(models.Model):
    # 自增主键
    _id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=20, verbose_name="客户名")
    mobile = models.IntegerField(default=0, verbose_name="手机号码")


class Score(models.Model):
    # 自增主键
    _id = models.AutoField(primary_key=True)
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
    score = models.IntegerField(default=0, verbose_name="分数")

admin.py

from django.contrib import admin
from .models import Customer


@admin.register(Customer)
class CustomerAdmin(admin.ModelAdmin):
    pass

上述内容补充完整之后,就可以进行后台对数据进行维护了。

Python Django 后台管理之后台模型属性详解

接下来就要学习第一个属性:date_hierarchy

18.2.1 date_hierarchy

该属性用于将时间列转换为可过滤字段,完成该操作需要在 models.py 中新增好 models.DateField 类型的字段。

create_time = models.DateField(default=timezone.now)

当模型发生变化,需要用下述命令进行一下同步。

python manage.py makemigrations scoring
python manage.py migrate

模型变化迁移之后,就可以在 admin.py 中进行配置了。

from django.contrib import admin
from .models import Customer

@admin.register(Customer)
class CustomerAdmin(admin.ModelAdmin):
    date_hierarchy = "create_time"

此时再运行应用之后,就可以在 customer 页面查看到最终结果了。

Python Django 后台管理之后台模型属性详解

18.2.2 actions_on_top/actions_on_bottom

控制动作条的显示位置,动作即操作。

Python Django 后台管理之后台模型属性详解

修改 admin.py 文件代码如下,可以控制动作条的展示位置。

@admin.register(Customer)
class CustomerAdmin(admin.ModelAdmin):
    date_hierarchy = "create_time"
    # actions_on_top = False
    actions_on_bottom = True

18.2.3 actions_selection_counter

动作条后面的计数是否展示。当其设置为 False 之后,后面的数字消失。

Python Django 后台管理之后台模型属性详解

18.2.4 list_display

该属性可以控制模型中列表显示的字段。代码修改为如下内容:

@admin.register(Customer)
class CustomerAdmin(admin.ModelAdmin):
    date_hierarchy = "create_time"
    actions_on_top = False
    actions_on_bottom = True
    list_display = ["_id", "name", "mobile", "create_time"]

最终呈现的数据如下:

Python Django 后台管理之后台模型属性详解

list_display 还可以给字段嵌套一个函数。

def warp_name(obj):
    return f"客户名:{obj.name}"

@admin.register(Customer)
class CustomerAdmin(admin.ModelAdmin):
    date_hierarchy = "create_time"
    actions_on_top = False
    actions_on_bottom = True

	# warp_name 为函数名,函数内会接收一个对象
    list_display = ["_id", warp_name, "mobile", "create_time"]
    warp_name.short_description = "格式化的名字"

也可以将上述代码的 warp_name 函数,放置到 CustomerAdmin 内部。

@admin.register(Customer)
class CustomerAdmin(admin.ModelAdmin):
    date_hierarchy = "create_time"
    actions_on_top = False
    actions_on_bottom = True

    def warp_name(self, obj):
        return f"客户名:{obj.name}"

    list_display = ["_id", 'warp_name', "mobile", "create_time"]

    warp_name.short_description = "格式化名字"

此时最大的区别就是 list_display 的列表中自定义的函数为一个字符串形式。

默认情况下 list_display 的第一项是超链接,点击可以进行编辑页面,可以通过 list_display_links 进行设置。

  • list_display_links:为 None 表示不显示任何链接;
  • 列表:标记哪些需要超链接。

18.2.5 empty_value_display

空数据展示的方式,默认空数据展示的是 --,使用该属性之后,可以进行自定义设置。
修改 models.py 文件,增加备注列。

class Customer(models.Model):
    # 自增主键
    _id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=20, verbose_name="客户名")
    mobile = models.IntegerField(default=0, verbose_name="手机号码")
    create_time = models.DateField(default=timezone.now)
    mark = models.CharField(max_length=50, null=True, blank=True)

重新运行迁移命令,然后运行应用,得到如下效果。

Python Django 后台管理之后台模型属性详解

接下来使用该字段进行数据的展示,在 admin.py 文件中进行设置。

empty_value_display = '/'

运行之后得到的结果如下:

Python Django 后台管理之后台模型属性详解

18.2.6 fields

控制显示的表单字段与顺序组合。例如增加如下代码之后,核对结果如下:

list_display = ["_id", 'warp_name', "mobile", "create_time","mark"]
fields = ["mobile","name"]

Python Django 后台管理之后台模型属性详解

18.2.7 其他要补充的属性

filter_horizontalfilter_vertical
筛选菜单的横排展示与竖排展示。

list_editable
可编辑字段。

list_filter
过滤器属性设置。

list_per_page
每页显示的数据条数。

ordering
排序字段列表。

paginator
分页类对象,需要提前引入 django.core.paginator.Paginator

radio_fields
字段在表单中是单选按钮。

readonly_fields
不可编辑字段。

search_fileds
列表页增加的筛选字段。

到此这篇关于Python Django 后台管理之后台模型属性的文章就介绍到这了,更多相关Python Django 后台管理内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Pycharm学习教程(2) 代码风格
May 02 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 Python
python retrying模块的使用方法详解
Sep 25 Python
Python数据分析pandas模块用法实例详解
Nov 20 Python
python 实现视频 图像帧提取
Dec 10 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 Python
详解Python 循环嵌套
Jul 09 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
python 绘制正态曲线的示例
Sep 24 Python
python MD5加密的示例
Oct 19 Python
如何用python反转图片,视频
python基于tkinter制作m3u8视频下载工具
用python自动生成日历
解决Django transaction进行事务管理踩过的坑
Apr 24 #Python
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
Apr 24 #Python
Python使用UDP实现720p视频传输的操作
python通配符之glob模块的使用详解
Apr 24 #Python
You might like
PHP中date()日期函数有关参数整理
2011/07/19 PHP
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
Jquery中获取iframe的代码
2011/01/11 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
vue实现表格增删改查效果的实例代码
2017/07/18 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
express异步函数异常捕获示例详解
2020/11/30 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
pymssql ntext字段调用问题解决方法
2008/12/17 Python
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
基于Python实现天天酷跑功能
2021/01/06 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
产品销售员岗位职责
2013/12/18 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
英文辞职信范文
2015/05/13 职场文书
SpringBoot集成Redis的思路详解
2021/10/16 Redis
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏