后台設置中文在 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
