zoukankan      html  css  js  c++  java
  • django下的xadmin相关设置

    后台设置中文在 settings.py

    LANGUAGE_CODE = 'zh-hans'
    
    TIME_ZONE = 'Asia/Shanghai'
    
    USE_I18N = True
    
    USE_L10N = True
    
    USE_TZ = False

    安装方法
    复制 xadmin 目录到你的项目(xadmin还没上传)
    pip install httplib2 django-formtools django-crispy-forms

    # setting.py
    INSTALLED_APPS = [
        ...,
        'xadmin',
        'crispy_forms',
    ]
    
    # urls.py
    import xadmin
    
    urlpatterns = [
        url(r'^admin/', xadmin.site.urls)
    ]

    设置主题:

    from xadmin import views
    
    
    class BaseSetting(object):
        enable_themes = True
        use_bootswatch=True
       
    xadmin.site.register(views.BaseAdminView,BaseSetting)
    

    修改左上角及foot:

    class GlobalSettings(object):
        site_title = ""
        site_footer = ""
        menu_style = "accordion" #左侧导航条修改可折叠
        
    xadmin.site.register(views.CommAdminView,GlobalSettings)
    

    修改左侧导航条app显示为中文:
    1、对应app下的apps.py添加:
    verbose_name = "app中文名"

    比如:

    from django.apps import AppConfig


    class GoodsConfig(AppConfig):
    name = 'goods'
    verbose_name = '商品'

    2、对应app下的__init__.py添加:
    default_app_config = "app名.apps.(apps.py里的class)"

    例如:default_app_config = 'goods.apps.GoodsConfig'

    xadmin的菜单折叠

    menu_style = "accordion"

    设置models的全局图标

    和上面修改title和footer一样,在类GlobalSetting 中添加:

    global_models_icon = {
        V_UserInfo: "glyphicon glyphicon-user", UserDistrict: "fa fa-cloud"
    }  # 设置models的全局图标

    1、在app下,增加adminx.py
    2、

    #adminx.py
    import xadmin
    
    from .models import StaffBase
    
    
    class StaffBaseAdmin(object):
        pass
    
    xadmin.site.register(StaffBase,StaffBaseAdmin)
      

    3、扩展:

    #adminx.py
    class StaffBaseAdmin(object):
        list_display=['字段1','字段2',......]#列表字段
        search_fields=['字段1','字段2',......]#属性指定可以通过搜索框搜索的数据列的名字, 搜索框搜索使用的是模糊查找的方式, 一般用来搜素名字等字符串字段
        list_filter=['字段1','字段2',......]#该属性指定可以过滤的列的名字, 系统会自动生成搜索器
        free_query_filter=['字段1','字段2',......]#默认为 True , 指定是否可以自由搜索. 如果开启自由搜索, 用户可以通过 url 参数来进行特定的搜索
        ordering=['字段1','字段2',......]#排序,加“-”为倒序
        readonly_fields=['字段1','字段2',......]#只读字段
        exclude=['字段1','字段2',......]#隐藏字段
        list_editable=['字段1','字段2',......]#列表页可修改
        show_detail_fields=['字段1','字段2',......]#显示数据详情,
       refresh_times =(3,5) #列表定时刷新,refresh_times 属性是存有刷新时间的数组. xadmin 默认不开启该插件.
        
        relfield_style='fk-ajax'  #下拉式可选,在外键对应的字段的adminx.py

    图表

    在数据列表页面,根据列表数据生成图表,可以指定多个数据列,生成多个图表。
     在Model OptionClass 中设定data_charts属性,该属性为dict类型,key是图表的标示名称,value是图表的具体设置属性,示例:

     data_charts = {
        "user_count": {'title': u"User Register Raise", "x-field": "year", "y-field": ("cn",),
                       "order": ('year',)},
        # "avg_count": {'title': u"Avg Report", "x-field": "date", "y-field": ('avg_count',), "order": ('date',)}
        }
    

    图表的主要属性为:
    title : 图表的显示名称
    x-field : 图表的 X 轴数据列, 一般是日期, 时间等
    y-field : 图表的 Y 轴数据列, 该项是一个 list, 可以同时设定多个列, 这样多个列的数据会在同一个图表中显示
    order : 排序信息, 如果不写则使用数据列表的排序

    同一个model注册两个管理器

    #adminx.py
    class app名Inline(object):
       model =  app名
       extra = 0
        
    

    在对应的app下:
    inlines=[app名Inline]

    例如

    class GoodsAdmin(object):
    list_display = ['id','category', 'name', 'goods_sn','click_num', 'sold_num', 'fav_num', 'goods_num', 'market_price',
    'shop_price', 'goods_brief', 'goods_desc', 'ship_free', 'goods_front_image', 'is_new', 'is_hot',"add_time"]

    search_fields = ['name', ]
    list_editable = ['is_host', ]
    list_filter = ['id','click_num', 'sold_num', 'fav_num', 'goods_num', 'market_price',
    'shop_price', 'is_new', 'is_hot']
    style_fields = {"goods_desc": "ueditor"}

    class GoodsImage(object):
    # 小轮播图GoodsAdmin
    model = GoodsImage
    extra = 0
    # relfield_style = 'fk-ajax'

    inlines = [GoodsImage, ]

    设置只读字段
    在使用xadmin的时候,ModelAdmin默认只有对于model的增删改查,但是总是有些字段是不希望用户来编辑的。而 readonly_fields 设置之后不管是admin还是其他用户都会变成只读,而我们通常只是想限制普通用户。 这时我们就可以通过重写 get_readonly_fields 方法来实现对特定用户的只读显示。

    class UserInfoAdmin():
     
        def get_readonly_fields(self):
            """  重新定义此函数,限制普通用户所能修改的字段  """
            if self.user.is_superuser:
                self.readonly_fields = []
            return self.readonly_fields
         
        readonly_fields = ('user_email',)
    参考:https://www.kancloud.cn/net_you/django_xadmin/388360
    xadmin中添加ueditor
    1 由于已经将xadmin源文件拷贝到了项目下,在xadmin下的plugin中新建一个ueditor.py文件,里面写入如下:
    import xadmin
    from xadmin.views import BaseAdminPlugin, CreateAdminView, ModelFormAdminView, UpdateAdminView
    from DjangoUeditor.models import UEditorField
    from DjangoUeditor.widgets import UEditorWidget
    from django.conf import settings
    
    
    class XadminUEditorWidget(UEditorWidget):
        def __init__(self,**kwargs):
            self.ueditor_options=kwargs
            self.Media.js = None
            super(XadminUEditorWidget,self).__init__(kwargs)
    
    
    class UeditorPlugin(BaseAdminPlugin):
    
        def get_field_style(self, attrs, db_field, style, **kwargs):
            if style == 'ueditor':
                if isinstance(db_field, UEditorField):
                    widget = db_field.formfield().widget
                    param = {}
                    param.update(widget.ueditor_settings)
                    param.update(widget.attrs)
                    return {'widget': XadminUEditorWidget(**param)}
            return attrs
    
        def block_extrahead(self, context, nodes):
            js = '<script type="text/javascript" src="%s"></script>' % (settings.STATIC_URL + "ueditor/ueditor.config.js")         #自己的静态目录
            js += '<script type="text/javascript" src="%s"></script>' % (settings.STATIC_URL + "ueditor/ueditor.all.min.js")   #自己的静态目录
            nodes.append(js)
    
    xadmin.site.register_plugin(UeditorPlugin, UpdateAdminView)
    xadmin.site.register_plugin(UeditorPlugin, CreateAdminView)
    

      2 将ueditor添加到plugin下的_init_

    PLUGINS = (
        ...
        'ueditor',
    )
    

      3 将ueditor添加到adminx.py中

    class CourseAdmin(object):
        ...
        style_fields = {"detail": "ueditor"}
    

      关于style_fields,如下:style_fields = {} 
    指定 Field 的 Style, Style一般用来实现同一种类型的字段的不同效果,例如同样是 radio button,有普通及inline两种 Style。通常 xadmin 针对表单的插件会实现更多的 Field Style。您使用这些插件后,只要方便的将想要使用插件效果的字段设置成插件实现的 Style 即可。

    4 在前端显示的话,需要对html页面修改如下

    {% autoescape off %}
    {{ course.detail }}
    {% endautoescape %}
    5 xadmin对category进行限定,必须是对应category_type=1这类的
    def get_context(self):
            context = super(GoodsBrandAdmin, self).get_context()
            if 'form' in context:
                context['form'].fields['category'].queryset = GoodsCategory.objects.filter(category_type=1)
            return context
     

    转载于:https://www.cnblogs.com/shangjunnihao/p/10653507.html

  • 相关阅读:
    如何解决WEB应用中文乱码问题
    js获取指定格式的时间字符串
    js 实现 Base64 编码的相互转换
    Sql Server 与 MySql 在使用 update inner join 时的区别
    VMware12创建新的虚拟机及设置硬件环境
    Sql Server 中使用日期遍历
    Linux 添加定时任务,crontab -e 命令与直接编辑 /etc/crontab 文件
    mysql 中 max_allowed_packet 查询和修改
    eclipse编译项目:Java @Override 注解报错的解决方法
    eclipse启动项目报错:java.lang.ClassNotFoundException: ContextLoaderListener
  • 原文地址:https://www.cnblogs.com/twodog/p/12134969.html
Copyright © 2011-2022 走看看