Xadmin自定义开发 笔记(一)
- 如何修改xadmin中模型的图标
其实只需要在app中的adminx.py对应的模型的注册类下添加一句即可
model_icon = 'fa fa-envelope'
当然这里是因为xadmin使用的第三方fontawesome的图标,所以这样使用。你可以自行在fontawesome官网查找你喜欢的图标进行修改。格式为model_icon = 'fa fa-xxxx'。
- 使用ajax动态加载列表
当你的模型中有外键,在后台添加数据时,会出现一个列表来供你选择
比如这样,不过如果当数据量增大,你还要从列表中查找你需要选择的数据,那就很不方便了。
所以,xadmin自带了使用ajax动态加载列表的功能,只需要在外键的注册类中添加下面代码即可
relfield_style = 'fa-ajax'
- 后台查看时使用默认排序
需要在后台查看某个模型的列表时给它默认按照某一项排序时,在模型注册类中加入下面的代码
ordering = ['-click_num']
list里是你需要排序的根据,直接使用模型中的字段名称即可
- 模型某个字段在后台中改为只读类型\模型某个字段在后台中不显示\模型某个字段在后台可直接修改\计时
当一些字段只适合查看的时候,就需要在模型注册类中做出如下添加
readonly_fields = ['fav_nums', 'click_num', 'students']list_editable = ['degree', 'desc'] # 列表页直接编辑修改exclude = ['', ] # 不显示字段refresh_times = [3, 5] # 计时刷新
- 模型列表中需要显示自定义字段
当你需要在模型列表中使用自定义字段时,可以直接使用模型中定义的类方法,xadmin将其看作字段,可以和字段一样正常使用
def get_zj_nums(self):return self.lesson_set.all().count()
这里我在课程model里定义了一个返回该课程所有章节的方法,然后在课程的模型注册类中,在list_display列表里添加'get_zj_nums'即可,不过这时在列表中显示如下。
显示的是我们方法的名字,并不是我们想要的章节数,所以得在模型的方法中作出修改
get_zj_nums.short_description = "章节数"
修改后,显示出你期待的正确值,这样就可以自定义字段在列表中显示了。
- 使用一个注册类管理多个模型
举个例子,当你具有两个模型,一个课程,一个章节。如果按照之前分开的注册类,当注册新的课程时,想添加该课程的章节,必须先添加课程后,再到章节的模型,添加该课程的章节。这样就很麻烦,所以xadmin可以将章节添加到课程添加界面
class LessonInline(object):model = Lessonextra = 0
在课程adminx.py文件中添加上面的类
inlines = [LessonInline]
在课程的注册类中添加上面属性即可
- 将某一类模型分类
如果有一个模型有一个属性可以把它们分成两类,就比如你的公司有一批成员,但其中一些人时管理层,这时是不是需要重新定义一个新的模型是管理层,一个是员工层,但是这两个模型实质上处理的是一张表,都是公司成员。那怎么操作呢?如下:
先在model文件中创建新的模型(我这里是课程由是否轮播来划分的,以此类推)
class BannerCourse(Course):class Meta:verbose_name = "轮播课程"verbose_name_plural = verbose_nameproxy = True # 设置为True 否则会重新注册一张数据表
BannerCourse继承Course类,所以模型中的字段和Course完全一致,但注意一点proxy必须是True,这样在整合数据库时才不会新建一张数据表。
创建好模型后,就得实现该模型由你规定的属性分类这个方法,下面重写模型中的queryset方法,获取到相应的数据
def queryset(self):qs = super(CourseAdmin, self).queryset()qs = qs.filter(is_banner=False)return qs
这里我的模型中有一个字段是is_banner,这个字段是布尔型,判断是否为轮播图
下来,我们需要在adminx.py中创建BannerCourse的注册类,把Course的注册类复制过来,然后修改is_banner = True即可。
- 课程保存时刷新该课程所在机构下的课程数
添加过课程后,该课程所在的机构中的课程数是不会自己刷新的,需要手动进行修改,所以这里重写模型的save_models方法,在其中添加逻辑来刷新课程数。
def save_models(self):# 保存课程的时候统计课程机构的课程数obj = self.new_objobj.save()if obj.course_org is not None:course_org = obj.course_orgcourse_org.course_nums = Course.objects.filter(course_org=course_org).count()course_org.save()
self.new_obj获取到新添加的模型实例,之后保存,如果这里不保存的话,后面计算机构的课程数时会少算新添加的这个。
Xadmin自定义开发 笔记(一)相关推荐
- Android开发笔记(一百三十七)自定义行为Behavior
协调布局CoordinatorLayout能够让内部的子控件互相配合着移动,这跟以往孤立的控件运动截然不同,协调运动的结果,意味着App画面更加流畅.自然,也更符合日常生活中的动作场景.如果你对Coo ...
- Android开发笔记(一百二十六)自定义音乐播放器
MediaRecorder/MediaPlayer 在Android手机上面,音频的处理比视频还要复杂,这真是出人意料.在前面的博文< Android开发笔记(五十七)录像录音与播放>中, ...
- Android开发笔记(一百二十五)自定义视频播放器
视频播放方式 在Android中播放视频的方式有两种: 1.使用MediaPlayer结合SurfaceView进行播放.其中通过SurfaceView显示视频的画面,通过MediaPlayer来设置 ...
- Android开发笔记(一百二十四)自定义相册
画廊Gallery Gallery是一个早期的画廊控件,左右滑动手势可展示内嵌的图片列表,类似于一个平面的万花筒.虽然Android现在将Gallery标记为Deprecation(表示已废弃),建议 ...
- Android开发笔记(一百一十八)自定义悬浮窗
WindowManager 在前面< Android开发笔记(六十六)自定义对话框>中,我们提到每个页面都是一个Window窗口,许多的Window对象需要一个管家来打理,这个管家我们称之 ...
- Android开发笔记(九十五)自定义Drawable
Drawable Bitmap是Android对图像的定义描述,而Drawable则是对图像的展现描述,在View视图中显示图像都是通过Drawable来实现的.其中有关Bitmap的介绍参见< ...
- Android开发笔记(六十六)自定义对话框
AlertDialog Android中最常用的对话框是AlertDialog,它可以完成常见的交互操作,如提示.确认.选择等等,然后就是进度对话框ProgressDialog(参见< Andr ...
- Android开发笔记(十一)自定义视图的构造方法
自定义视图的用法 Android自带的视图常常不能满足实际开发的需求,这种情况下我们就得自定义视图(View). 首先在res\values目录下找到attrs.xml(如没有则创建之),在该属性定义 ...
- Android开发笔记(一百四十八)自定义输入法软键盘
手机上输入文字,都是通过系统自带的软键盘,这个软键盘可以是Android自带的,也可以是第三方软键盘如搜狗输入法.多数情况下面,系统自带的软键盘已经够用了,可是总有少数情况,系统软键盘无法满足开发者的 ...
最新文章
- WPF and Silverlight 学习笔记(十):WPF控件模型
- linux r服务安装失败,R包:RCurl和curl包在Linux上安装失败
- oracle卸载注意啥,关于oracle的安装,卸载以及其他注意事项
- matlab实现单纯型法解线性规划_【考研运筹学讲解】线性规划(一)
- 计算机网络 上海交大 ppt,上海交大计算机网络2.ppt
- java遍历删除原理,Java 垃圾回收机制实现原理
- DELL服务器 技术交流QQ群
- 【5G落地】首批5G商用牌照正式颁发!5G和AI并肩前行,会带来下一次的工业革命吗?...
- 快手员工泄露10亿元公司机密 被开除并收回期权,官方暂未回应...
- 在package.json中使用git URL依赖分支或标记?
- Docker入门者手册
- mysql 2000安装教程_Win10 64位安装个人版SQL2000图文教程
- c++20中的span
- keil 生成三角波dac0832_怎么样利用南方CASS三角网法和方格网法进行土方量计算...
- Linux修改系统时间为东八区北京时间(上海时间)
- Excel 删除重复数据只保留一条的绿色工具,excel删除重复的行
- Unity Shader -描边(后期处理)
- php学习基础篇之基础函数(数学 日期 字符串)、php循环流程控制
- oracle判断是否是手机号码,oracle存储过程判断手机号码和固话
- 技术交流电脑BUG.sssss