• 如何修改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自定义开发 笔记(一)相关推荐

  1. Android开发笔记(一百三十七)自定义行为Behavior

    协调布局CoordinatorLayout能够让内部的子控件互相配合着移动,这跟以往孤立的控件运动截然不同,协调运动的结果,意味着App画面更加流畅.自然,也更符合日常生活中的动作场景.如果你对Coo ...

  2. Android开发笔记(一百二十六)自定义音乐播放器

    MediaRecorder/MediaPlayer 在Android手机上面,音频的处理比视频还要复杂,这真是出人意料.在前面的博文< Android开发笔记(五十七)录像录音与播放>中, ...

  3. Android开发笔记(一百二十五)自定义视频播放器

    视频播放方式 在Android中播放视频的方式有两种: 1.使用MediaPlayer结合SurfaceView进行播放.其中通过SurfaceView显示视频的画面,通过MediaPlayer来设置 ...

  4. Android开发笔记(一百二十四)自定义相册

    画廊Gallery Gallery是一个早期的画廊控件,左右滑动手势可展示内嵌的图片列表,类似于一个平面的万花筒.虽然Android现在将Gallery标记为Deprecation(表示已废弃),建议 ...

  5. Android开发笔记(一百一十八)自定义悬浮窗

    WindowManager 在前面< Android开发笔记(六十六)自定义对话框>中,我们提到每个页面都是一个Window窗口,许多的Window对象需要一个管家来打理,这个管家我们称之 ...

  6. Android开发笔记(九十五)自定义Drawable

    Drawable Bitmap是Android对图像的定义描述,而Drawable则是对图像的展现描述,在View视图中显示图像都是通过Drawable来实现的.其中有关Bitmap的介绍参见< ...

  7. Android开发笔记(六十六)自定义对话框

    AlertDialog Android中最常用的对话框是AlertDialog,它可以完成常见的交互操作,如提示.确认.选择等等,然后就是进度对话框ProgressDialog(参见< Andr ...

  8. Android开发笔记(十一)自定义视图的构造方法

    自定义视图的用法 Android自带的视图常常不能满足实际开发的需求,这种情况下我们就得自定义视图(View). 首先在res\values目录下找到attrs.xml(如没有则创建之),在该属性定义 ...

  9. Android开发笔记(一百四十八)自定义输入法软键盘

    手机上输入文字,都是通过系统自带的软键盘,这个软键盘可以是Android自带的,也可以是第三方软键盘如搜狗输入法.多数情况下面,系统自带的软键盘已经够用了,可是总有少数情况,系统软键盘无法满足开发者的 ...

最新文章

  1. WPF and Silverlight 学习笔记(十):WPF控件模型
  2. linux r服务安装失败,R包:RCurl和curl包在Linux上安装失败
  3. oracle卸载注意啥,关于oracle的安装,卸载以及其他注意事项
  4. matlab实现单纯型法解线性规划_【考研运筹学讲解】线性规划(一)
  5. 计算机网络 上海交大 ppt,上海交大计算机网络2.ppt
  6. java遍历删除原理,Java 垃圾回收机制实现原理
  7. DELL服务器 技术交流QQ群
  8. 【5G落地】首批5G商用牌照正式颁发!5G和AI并肩前行,会带来下一次的工业革命吗?...
  9. 快手员工泄露10亿元公司机密 被开除并收回期权,官方暂未回应...
  10. 在package.json中使用git URL依赖分支或标记?
  11. Docker入门者手册
  12. mysql 2000安装教程_Win10 64位安装个人版SQL2000图文教程
  13. c++20中的span
  14. keil 生成三角波dac0832_怎么样利用南方CASS三角网法和方格网法进行土方量计算...
  15. Linux修改系统时间为东八区北京时间(上海时间)
  16. Excel 删除重复数据只保留一条的绿色工具,excel删除重复的行
  17. Unity Shader -描边(后期处理)
  18. php学习基础篇之基础函数(数学 日期 字符串)、php循环流程控制
  19. oracle判断是否是手机号码,oracle存储过程判断手机号码和固话
  20. 技术交流电脑BUG.sssss

热门文章

  1. 解决 vendor.js 过大的问题
  2. 数据治理-数据生命周期管理-大数据归档与销毁
  3. pjsip学习 ------ 三
  4. word的使用学习笔记(一)
  5. 苹果将推出自助维修计划
  6. class torch.optim.lr_scheduler.ExponentialLR
  7. 非root执行php不输出,Linux下crond切换到非root用户不执行的问题解决方法
  8. PB 中获取时间的方法
  9. SQL Server数据库建表以及使用方法
  10. 什么是字节码?采用字节码的好处是什么?