• xadmin的使用


    xadmin的使用及注意点



    1 基本使用

    注意 xadmin <=1.9 版本  django <= 1.9 功能正常 
    
    		注意django<1.9 旧版本 中间件配置是 middleware_class
    
    xadmin 1.11 django 1.11 不能使用小插件
    

    1 下载与安装

    pip  编码问题 
    

    解决方法--DJANGO 1.9 安装 XADMIN 遇到的问题

    本地 zip 方法安装  (注意,依赖包的下载)
    

    2 部署

    ! installed apps 中 添加
    
         'xadmin',
         'crispy_forms'
    
    ! urls 中 配置
    
        import xadmin
    
        urlpatterns = [
          url(r'^xadmin/',xadmin.site.urls),
        ]
    
    
    ! 同步数据表
    
    
       makekigrations
       migrate   -->>  生成下面的四张表(失败需要全部清空 migrations记录)
    
                xadmin_bookmark
                xadmin_log
                xadmin_usersettings
                xadmin_userwidget
    
    
        否则会有异常
    

    3 注册使用

    新建    adminx.py 注册文件
    
    	注意  : user 表 默认注册  ==  不需要再注册
    
         	 外键关联的 可以 用 双下划綫 _ _ 如  'book__name'来显示  筛选
    
          class CourseAdmin(object):
                list_display = [,]
                list_filter = [,]
                search_fields = [,]
                list_editable = [,]
                ordering = ['-clicknums']
                readonly_fields = [,] 只读字段
                exclude = [,]
    
            class CourseOrgAdmin(object):   #  课程的外键关联  显示的不是全部的下拉框,而是搜索框
                relfield_style = 'fk_ajax'  # fk-外键 显示样式
    

    在 wizard 中 可能会报错

    except:
        # work for django<1.8
        from django.contrib.formtools.wizard.storage import get_storage
        from django.contrib.formtools.wizard.forms import ManagementForm
        from django.contrib.formtools.wizard.views import StepsHelper
    
    改为 except:
            pass
    

    xadmin 全局的样式配置

    主题配置
    
        	在 adminx 注册文件中 增加
    
            from xadmin import views
    
            class BaseSetting(object):
                enable_themes = True    # 使用主题
                use_bootswatch = True
            xadmin.site.register(views.BaseAdminView,BaseSetting)
    
      其他全局样式配置
    
        class GlobalSettings(object):
            site_title = '慕学管理系统'  # 标题
            site_footer = '慕学在线网'  # 页尾
            menu_style = 'accordion'  # 设置左侧菜单  折叠样式
    
        xadmin.site.register(views.CommAdminView,GlobalSettings)
        
    
    app 的显示名字
    
         每个 app 应用下的 apps.py文件
    
                verbose_name = 'apps的名字'
    
         __init__.py文件
    
            default_app_config = 'crm.apps.CRMConfig'
    


    2 扩展


    4 inlines 机制 同一个页面 可以添加 所有的相关信息

      注意:  只有一层嵌套
    
    
        class LessonInline(object):
            model = Lesson
            extra = 0
    
        class CourseAdmin(object):
            list_display = []
            search_field = []
            ...
            inlines = [LessonInline]
    

    5 重载显示样式

    from xadmin.layout import Main,Fieldset,Row,Side
     def get_form_layout(self):
        if self.org_obj:
            self.form_layout = (
                Main(
                    Fieldset('',
                             'username', 'password',
                             css_class='unsort no_title'
                             ),
                    Fieldset(_('Personal info'),
                             Row('first_name', 'last_name'),  # 显示在一行
                             'email'
                             ),
                    Fieldset(_('Permissions'),
                             'groups', 'user_permissions'
                             ),
                    Fieldset(_('Important dates'),
                             'last_login', 'date_joined'
                             ),
                	),
                Side(
                    Fieldset(_('Status'),
                             'is_active', 'is_staff', 'is_superuser',
                   ),
                )
    
            )
        return super(UserAdmin, self).get_form_layout()子主题
    

    6 model 的 管理器,一个model 分不同情况 管理

        class Course(models.Model):
            pass
    
        class BannerCourse(Course):   # 继承 父类 course
            class Meta:
               verbose_name = '轮播课程'
               verbose_name_plural = verbose_name
               proxy = True  # 不会生成新的表
    
    
             注册新的表
    
        class CourseSourceAdmin(object):
            list_display = ['course','name','add_time','download']
            list_filter = ['course','name','add_time','download']
            search_fields = ['course','name','download']
    
            def queryset(self):
                qs = super(CourseAdmin,self).queryset()
    
    
                qs = qs.filter(is_banner=False)
                return qs
    

    7 重载 save_models 方法

        后台管理过程中  数据的系列改变
    
            course 新增对象
    
            courseorg 中的对应数值 也 相应的 变化
    
    
    
            class CourseAdmin():
                def save_models(self):
                course_obj = self.new_obj
                course_obj.save()
                course_org = course_obj.course_org
                if course_org:
                    course_org.courses_nums = Course.objects.all().count()
                    course_org.save()
    

    8 xadmin的 refresh 插件

        refresh_times = [3,5]  # 选择刷新时间  3,5 秒
    

    9 xadmin 注册时候定义函数,这些函数也可以写在 model中

    from django.utils.safestring import mark_safe
    
        class CourseAdmin():
            list_display = ['','rename']  # 之前在model中定义的函数
    
           1 
           def rename(self,obj):
                return '{0} ({1}期)'.format(obj.course,obj.semster)
    
           2  actions
          def get_nums(self, request, queryset):
            return self.queryset().count()
        
        get_nums.short_description = '获取数据'
        actions = [get_nums, ]
    
    例子1: 获取 学生的人数
    
          def rename(self,obj):
            return '{0} ({1}期)'.format(obj.course,obj.semster)
    
        def student_num(self,obj):
            return obj.student_set.all().count()
    
    例子2 批量初始化上课记录
    
      def init_course_record(self, request, queryset):
    
            teacher_ids = [obj.id for obj in queryset]
            bulk_list = []
            class_lists = ClassList.objects.filter(teacher__id__in=teacher_ids)
            for class_ in class_lists:
                for teacher in queryset:
                    bulk_list.append(CourseRecord(class_obj=class_, teacher=teacher))
            CourseRecord.objects.bulk_create(bulk_list)
    
        init_course_record.short_description = '初始化上课记录'
        actions = [init_course_record, ]
    
    例子3 考勤批量处理
        def check_attendance(self,request,queryset):
            queryset.update(record='noshow')
    
        def check_vacate(self,request,queryset):
            queryset.update(record='vacate')
    
       def check_late(self,request,queryset):
          queryset.update(record='late')
        
        check_attendance.short_description = '缺勤批量处理'
        check_vacate.short_description = '请假批量处理'
        check_late.short_description = '迟到批量处理'
        actions = [check_attendance,check_vacate,check_late]
    

    10 显示的 小图标icon

        xadmin/vendor/font-awesome
        用最新版替换--图标存放文件
    
        model_icon 字段 = 'fa fa-icon'
            指定 font-awesome 图标
    
    class CourseAdmin(object):
        list_display = ['name']
        list_filter = ['name']
        search_fields = ['name']
        model_icon = 'fa fa-leanpub'   # # 
    

    11 获取当前的user表model

     from django.contrib.auth import get_user_model  (获取当前的user表model)
        User = get_user_model()
        site.register(User,Useradmin)
    

    12 卸载注册的model

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

    13 替换默认的注册 user(继承了abstractuser)

           class UserInfoAdmin(object):
                list_display = ['auth','name','depart','email','username']
                list_filter = ['auth','name','depart','email','username']
                search_fields = ['auth','name','depart','email','username']
                list_editable = ['auth','name','depart','email','username']
                list_display_links = ['auth','name','depart','email','username']
                model_icon = 'fa fa-user-circle-o'
    
    from django.contrib.auth import get_user_model # 获取当前的user_model
    xadmin.site.unregister(get_user_model())    # 注销 user
    xadmin.site.register(UserInfo,UserInfoAdmin) # 注册新的 user
  • 相关阅读:
    [LeetCode] 303. 区域和检索
    [LeetCode] 120. 三角形最小路径和 ☆☆☆(动态规划 范例)
    [LeetCode] 18. 四数之和 ☆☆☆(双指针)
    [LeetCode] 16. 最接近的三数之和 ☆☆☆(双指针)
    [LeetCode] 109. 有序链表转换二叉搜索树 ☆☆☆(递归)
    优惠券模块设计要点
    nginx upstream 实现负载均衡
    nginx fastcgi配置
    nginx rewrite规则
    nginx Location 配置
  • 原文地址:https://www.cnblogs.com/big-handsome-guy/p/8511858.html
Copyright © 2020-2023  润新知