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

原文地址:https://www.cnblogs.com/twodog/p/12134967.html