zoukankan      html  css  js  c++  java
  • 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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Android OpenGL ES 2.0 (四) 灯光perfragment lighting
    Android OpenGL ES 2.0 (五) 添加材质
    冒泡排序函数
    javascript object 转换为 json格式 toJSONString
    Liunx CentOS 下载地址
    jquery 图片切换特效 鼠标点击左右按钮焦点图切换滚动
    javascript 解析csv 的function
    mysql Innodb Shutdown completed; log sequence number解决办法
    Centos 添加 yum
    javascript 键值转换
  • 原文地址:https://www.cnblogs.com/mashuqi/p/11022516.html
Copyright © 2011-2022 走看看