• django后台xadmin如下配置(小结)


    django-admin文档:https://xadmin.readthedocs.io/en/latest/index.html
    目录:

        1、xadmin基本配置

        2、配置后台显示的模型类

        3、后台注册模型类

        4、修改后台应用、字段显示的名字

        5、修改应用在后台显示的名字

        6、修改admin后台显示的图标,如应用的图标和表的图标。

        7、自定义user用户管理

        8、后台显示数据库中不存在的字段

        9、save_models 和 delete_model

    安装最新的xadmin 

    pip install https://github.com/sshwsfc/xadmin/tarball/master
    在django中注册xadmin应用

    # 安装 xadmin 以下三个 应用
    'xadmin',
    'crispy_forms',
    'reversion',
    添加路由

    # 注释掉 django 自带的 admin路由
    # url(r'^admin/', admin.site.urls),
    url(r'xadmin/', include(xadmin.site.urls)),
    编写adminx.py 文件

    1、配置基本信息

    class BaseSetting(object):
    """xadmin的基本配置"""
    enable_themes = True # 开启主题切换功能
    use_bootswatch = True

    class GlobalSettings(object):
    """xadmin的全局配置"""
    site_title = "xx运营管理系统" # 设置站点标题
    site_footer = "xx科技有限公司" # 设置站点的页脚
    menu_style = "accordion" # 设置菜单折叠


    xadmin.site.register(views.CommAdminView, GlobalSettings)
    xadmin.site.register(views.BaseAdminView, BaseSetting)
    2、配置后台显示的模型类


    """
    list_display 控制列表展示的字段
    search_fields 控制可以通过搜索框搜索的字段名称,xadmin使用的是模糊查询
    list_filter 可以进行过滤操作的列
    ordering 默认排序的字段
    readonly_fields 在编辑页面的只读字段
    exclude 在编辑页面隐藏的字段
    list_editable 在列表页可以快速直接编辑的字段
    show_detail_fileds 在列表页提供快速显示详情信息
    refresh_times 指定列表页的定时刷新
    list_export 控制列表页导出数据的可选格式
    show_bookmarks 控制是否显示书签功能
    data_charts 控制显示图标的样式
    model_icon 控制菜单的图标

    """
    # Objects 模型类名
    class ObjectsAdminModel(object):
    # def save_model
    list_display = ['name','create_date','update_date','verified_reason','is_delete','categry','title','image','location']
    list_filter= ['location','categry']
    # data_charts= 'drivers-license-o'
    search_fields = ['id', 'name']
    # model_icon = 'fa fa-user-o'
    list_editable = ['name']

    3、后台注册模型类

    xadmin.site.register(views.Objects, ObjectsAdminModel)
    4、修改后台应用、字段显示的名字

    # 在 django的models.py 文件中
    class classname(models.Model):
    name = models.CharField(max_length=20,unique=True,verbose_name='字段名字')

    class Meta:
    db_table = 'table name' # 数据库中以这个名字创建数据表
    verbose_name = '表名' # 后台显示的表名
    verbose_name_plural = '表名' # 后台显示的表名复数 英语复数是加s 这里我们写死为 要显示的表名
    5、修改应用在后台显示的名字

    # 在 应用模块下的apps.py 文夹下

    class xxxConfig(AppConfig):
    name = 'xxx'
    verbose_name = 'xx信息'
    # 应用 下的 __init__.py 文件
    default_app_config = "应用.apps.应用Config" # 应用的路径
    6、修改admin后台显示的图标,如应用的图标和表的图标。

    去到这个网站下载最新的图标文件  http://fontawesome.dashgame.com/

    替换xadmin的原来的图标文件

    修改xadmin的图标文件

    去到 http://fontawesome.dashgame.com/ 找到合适的图标样式 点击 图标边上的 复制按钮  复制图标的css样式名字

    Django的adminx.py 文件中修如下 

     model_icon = 'fa 复制来的css样式名字'

    修改完后xadmin后台样式

    比原来的圆圈 图标好看多了

    7、最后关于user 应用   Django是自带用户管理的,xadmin也会自动注册user,若要自定义用户模型类,需要在xadmin 注销user再注册,后台才会显示新注册的user模型类,没注销就注册user会报错

    先注销后注册

    xadmin.site.unregister(User)
    xadmin.site.register(User, UserAdmin)
     

    import xadmin
    # Register your models here.

    from .models import User
    from xadmin.plugins import auth


    class UserAdmin(auth.UserAdmin):
    list_display = ['id', 'username', 'mobile', 'email', 'date_joined']
    readonly_fields = ['last_login', 'date_joined']
    search_fields = ('username', 'first_name', 'last_name', 'email', 'mobile')
    style_fields = {'user_permissions': 'm2m_transfer', 'groups': 'm2m_transfer'}

    def get_model_form(self, **kwargs):
    if self.org_obj is None:
    self.fields = ['username', 'mobile', 'is_staff']

    return super().get_model_form(**kwargs)


    xadmin.site.unregister(User)
    xadmin.site.register(User, UserAdmin)
    8、后台显示模型类不存在的字段。

         需求如下:订单信息中显示商品,但是我们知道订单和订单中的商品是分开两个表储存的,通过外键关联起来。那如何在订单信息中显示所包含的商品呢?

            一、在订单中再添加一个字段,保存该订单所有商品的简单信息。

            二、不修改数据库字段,而是在后台显示时多显示一字段(显示改订单的所有商品的基本信息)

    第二种方法的代码如下:自定义一个显示字段(get_goods),该字段必须为只读(readonly_fields)才会显示出来。

    class OrdersAdminModel(object):


    def get_goods(self,obj):
    goods_queryset = obj.ordergoods_set.all()
    return str(["商品%s:%s 单价:%s 元"%(i.goods.id,i.goods.name,i.goods.price) for i in goods_queryset])
    get_goods.short_description = '购买的商品'

    list_display = ['order_id','user','status','get_goods']
    readonly_fields = ("order_id",'get_goods')
    9、django自带的admin是有save_models和delete_model的,后台修改模型类后就会执行改函数,xadmin中如下

    def save_models(self):

    #新的对象
    obj = self.new_obj
    #可以在这里面写些逻辑
    # 保存该对象
    obj.save()

    def delete_model(self):
    # 删除数据对象
    obj = self.obj
    #相应的操作
    obj.delete()
    ---------------------
    作者:bugMakeer
    来源:CSDN
    原文:https://blog.csdn.net/p571912102/article/details/82180034
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    设置debian6源
    debian7编译安装tengine添加lua和ldap模块
    elasticsearch5使用snapshot接口备份索引
    logstash5生成init脚本后台启动
    Xpack集成LDAP
    debian安装filebeat5.5收集nginx日志
    kibana5画图
    安装Xtrabackup,设置定时备份msyql数据库
    编译安装nrpe,配置监控mysql端口和主从状态
    编译安装keepalived,实现双主mysql高可用
  • 原文地址:https://www.cnblogs.com/mashuqi/p/11022516.html
Copyright © 2020-2023  润新知