抱歉,你查看的文章不存在

最新Django2.0.1在线教育零基础到上线教程(十三)xadmin的进阶开发

演示地址: http://mxonline.mtianyan.cn

教程仓库地址1: https://github.com/mtianyan/DjangoGetStarted 教程仓库地址2: https://github.com/mtianyan/Mxonline2 教程仓库地址3: https://github.com/mtianyan/Mxonline3

十三: xadmin进阶开发

xadmin的进阶开发

static目录问题。

xadmin的static文件在自己的目录下所以我们找不到

1- url下的static路由配置注释掉 2- setting中的StaticRoot注释掉

mark

from xadmin.plugins.auth import UserAdmin

class UserProfileAdmin(UserAdmin):
    pass

xadmin.site.register(UserProfile,UserProfileAdmin)

from django.contrib.auth.models import User
xadmin.site.unregister(User)

点进UserProfileAdmin中可以看官方是怎么实现布局的,我们可以重载

get_form_layout

自定义的显示方式

get_user_model 获取用户: User =

django权限赋值方式:赋给用户。没一个表的增删改查。

auth_permission 组权限

自定义icon

model_icon = 'fa fa-group'

xadmin/static/xadmin/vendor/font-awesome

官网下载然后替换css和font

默认排序

adminx中

    ordering = ['-click_nums']
    readonly_fields =['click_nums','fav_nums']
        exclude = ['fav_nums']

两个字段是冲突的。

下拉框搜索:

relfield_style = 'fk-ajax'

当有外键指向他,会以ajax方式加载

数据量过大时很有用

inlines添加数据。

在一个页面直接完成章节。

# 课程直接添加章节
class LessonInline(object):
    model = Lesson
    extra = 0

        # 课程直接添加章节
    inlines = [LessonInline]

没法完成在章节中再嵌套视频 但是可以有多个inline。在添加课程时添加课程资源

一张表分两个model来管理

class BannerCourse(Course):
    class Meta:
        verbose_name = "轮播课程"
        verbose_name_plural = verbose_name
        proxy = True

设置proxy = true会具有model的功能,但不会生成表

# Course的admin管理器
class BannerCourseAdmin(object):
    list_display = [
        'name',
        'desc',
        'detail',
        'degree',
        'learn_times',
        'students']
    search_fields = ['name', 'desc', 'detail', 'degree', 'students']
    list_filter = [
        'name',
        'desc',
        'detail',
        'degree',
        'learn_times',
        'students']
    ordering = ['-click_nums']
    readonly_fields =['click_nums']
    exclude = ['fav_nums']
    # 课程直接添加章节
    inlines = [LessonInline,CourseResourceInline]
# 将管理器与model进行注册关联
xadmin.site.register(BannerCourse, BannerCourseAdmin)

admin中重载queryset方法。

    # 过滤列表中的数据
    def queryset(self):
        qs = super(BannerCourseAdmin, self).queryset()
        qs = qs.filter(is_banner=True)
        return qs
    # 过滤列表中的数据
    def queryset(self):
        qs = super(CourseAdmin, self).queryset()
        qs = qs.filter(is_banner=False)
        return qs

xamdin其他常见功能:

可以在列表上快速修改内容、

  list_editable = [ 'degree','desc',]

自定义函数作为列

    def get_zj_nums(self):
        return self.lesson_set.all().count()
    get_zj_nums.short_description = "章节数"

显示自定义的html代码

      def go_to(self):
        from django.utils.safestring import mark_safe
        # 如果不mark safe。会对其进行转义
        return  mark_safe("<a href='http://blog.mtianyan.cn'>跳转</>")
    go_to.short_description = "跳转"

xadmin的工具: refresh

xadmin/plugins/refresh.py

列表页定时刷新的工具

    refresh_times = [3,5]

字段联动

应用场景: 新增一门课程之后,courseorg的课程数+1

  def save_models(self):
        # 在保存课程的时候统计课程机构的课程数
        # 字段联动
        obj = self.new_obj
        # 新增课程还没有保存,统计的课程数少一个
        obj.save()
        # 必须确定存在。
        if obj.course_org is not None:
            # obj实际是一个course对象
            course_org = obj.course_org
            course_org.course_nums = Course.objects.filter(course_org = course_org).count()
            course_org.save()

不用在课程里面添加章节数。

xadmin自行探究

  • local 语言包
  • migration 数据表的记录
  • plugins 每一个后台页面都是一个plugin 插件机制
  • static文件。js css
  • template xadmin自己用到的html文件
  • 对django admin的封装

下载源码包

添加插件使得可以识别ueditor field

记得在init中注册。

mark

mark

mark

关闭自动转义。

导入excel

  1. 如何注入导入excel代码到菜单
  2. 如何只在课程列表显示
  3. 如何接收文件对文件进行处理

mark

adminx 文件中的变量覆盖插件内部变量。

只需要重载block_top_toolbar,就会把这个放到页面里面 默认使用bootstrap

init确定是否启用插件,

    def post(self, request, *args , **kwargs):
        if 'excel' in request.FILES:
            pass

adminx中重写post方法。上传文件会被放在request.FILES中。

中间pass步骤不管做什么事情,都要最后return父类的

return super(CourseAdmin, self).post(request, args, kwargs)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

有趣的Python

0 篇文章106 人订阅

相关文章

来自专栏老安的博客

zabbix 自动发现tomcat的war包并实现监控

1392
来自专栏枕边书

代码迁移之旅(二)- 渐进式迁移方案

说在前面 这是代码迁移的第二篇文章,也是最后一篇了,由于个人原因,原来的迁移我无法继续参与了,但完整的方案我已经准备好了,在测试环境也已经可以正常进行了。 上篇...

2479
来自专栏月色的自留地

Mac电脑C语言开发的入门帖

3225
来自专栏Albert陈凯

手把手教你用python抓取网页导入模块 urllib2随便查询一篇文章,比如On random graph。对每一个查询googlescholar都有一个url,这个url形成的规则是要自己分析的。

http://www.1point3acres.com/bbs/thread-83337-1-1.html **前言: ** 数据科学越来越火了,网页是数据...

3307
来自专栏木东居士的专栏

从0写一个爬虫,爬取500w好友关系数据

6936
来自专栏蛋未明的专栏

Node.js内存泄漏分析

3084
来自专栏应用案例

IT面试干货:PHP面试题汇总及答案

随着近两年来互联网潮流的发展,不少人选择php程序开发的学习。所以今天济南IT培训优就业的老师将与大家一起聊一聊PHP面试会问什么?、 ? PHP程序员经典面试...

3959
来自专栏影子

一张图解析 编译器编译流程

40015
来自专栏喵了个咪的博客空间

phalapi-入门篇4(国际化高可用和自动生成文档)

phalapi-入门篇4(国际化高可用和自动生成文档) ? 前言 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 在...

3759
来自专栏小特工作室

工作流组件示例(全部开源)

1.概述 1.1简介 本文档旨在帮助开发人员快速使用工作流组件,完成OA或审批等涉及到工作流组件的系统开发工作 1.2组件构成 1.2.1组件层次图 ? 组...

76810

扫码关注云+社区

领取腾讯云代金券