xadmin的使用及注意點
1 基本使用
注意 xadmin <=1.9 版本 django <= 1.9 功能正常
注意django<1.9 舊版本 中間件配置是 middleware_class
xadmin 1.11 django 1.11 不能使用小插件
1 下載與安裝
pip 編碼問題
解決方法--DJANGO 1.9 安裝 XADMIN 遇到的問題
本地 zip 方法安裝 (注意,依賴包的下載)
2 部署
! installed apps 中 添加
'xadmin',
'crispy_forms'
! urls 中 配置
import xadmin
urlpatterns = [
url(r'^xadmin/',xadmin.site.urls),
]
! 同步數據表
makekigrations
migrate -->> 生成下面的四張表(失敗需要全部清空 migrations記錄)
xadmin_bookmark
xadmin_log
xadmin_usersettings
xadmin_userwidget
否則會有異常
3 注冊使用
新建 adminx.py 注冊文件
注意 : user 表 默認注冊 == 不需要再注冊
外鍵關聯的 可以 用 雙下划綫 _ _ 如 'book__name'來顯示 篩選
class CourseAdmin(object):
list_display = [,]
list_filter = [,]
search_fields = [,]
list_editable = [,]
ordering = ['-clicknums']
readonly_fields = [,] 只讀字段
exclude = [,]
class CourseOrgAdmin(object): # 課程的外鍵關聯 顯示的不是全部的下拉框,而是搜索框
relfield_style = 'fk_ajax' # fk-外鍵 顯示樣式
在 wizard 中 可能會報錯
except:
# work for django<1.8
from django.contrib.formtools.wizard.storage import get_storage
from django.contrib.formtools.wizard.forms import ManagementForm
from django.contrib.formtools.wizard.views import StepsHelper
改為 except:
pass
xadmin 全局的樣式配置
主題配置
在 adminx 注冊文件中 增加
from xadmin import views
class BaseSetting(object):
enable_themes = True # 使用主題
use_bootswatch = True
xadmin.site.register(views.BaseAdminView,BaseSetting)
其他全局樣式配置
class GlobalSettings(object):
site_title = '慕學管理系統' # 標題
site_footer = '慕學在線網' # 頁尾
menu_style = 'accordion' # 設置左側菜單 折疊樣式
xadmin.site.register(views.CommAdminView,GlobalSettings)
app 的顯示名字
每個 app 應用下的 apps.py文件
verbose_name = 'apps的名字'
__init__.py文件
default_app_config = 'crm.apps.CRMConfig'
2 擴展
4 inlines 機制 同一個頁面 可以添加 所有的相關信息
注意: 只有一層嵌套
class LessonInline(object):
model = Lesson
extra = 0
class CourseAdmin(object):
list_display = []
search_field = []
...
inlines = [LessonInline]
5 重載顯示樣式
from xadmin.layout import Main,Fieldset,Row,Side
def get_form_layout(self):
if self.org_obj:
self.form_layout = (
Main(
Fieldset('',
'username', 'password',
css_class='unsort no_title'
),
Fieldset(_('Personal info'),
Row('first_name', 'last_name'), # 顯示在一行
'email'
),
Fieldset(_('Permissions'),
'groups', 'user_permissions'
),
Fieldset(_('Important dates'),
'last_login', 'date_joined'
),
),
Side(
Fieldset(_('Status'),
'is_active', 'is_staff', 'is_superuser',
),
)
)
return super(UserAdmin, self).get_form_layout()子主題
6 model 的 管理器,一個model 分不同情況 管理
class Course(models.Model):
pass
class BannerCourse(Course): # 繼承 父類 course
class Meta:
verbose_name = '輪播課程'
verbose_name_plural = verbose_name
proxy = True # 不會生成新的表
注冊新的表
class CourseSourceAdmin(object):
list_display = ['course','name','add_time','download']
list_filter = ['course','name','add_time','download']
search_fields = ['course','name','download']
def queryset(self):
qs = super(CourseAdmin,self).queryset()
qs = qs.filter(is_banner=False)
return qs
7 重載 save_models 方法
后台管理過程中 數據的系列改變
course 新增對象
courseorg 中的對應數值 也 相應的 變化
class CourseAdmin():
def save_models(self):
course_obj = self.new_obj
course_obj.save()
course_org = course_obj.course_org
if course_org:
course_org.courses_nums = Course.objects.all().count()
course_org.save()
8 xadmin的 refresh 插件
refresh_times = [3,5] # 選擇刷新時間 3,5 秒
9 xadmin 注冊時候定義函數,這些函數也可以寫在 model中
from django.utils.safestring import mark_safe
class CourseAdmin():
list_display = ['','rename'] # 之前在model中定義的函數
1
def rename(self,obj):
return '{0} ({1}期)'.format(obj.course,obj.semster)
2 actions
def get_nums(self, request, queryset):
return self.queryset().count()
get_nums.short_description = '獲取數據'
actions = [get_nums, ]
例子1: 獲取 學生的人數
def rename(self,obj):
return '{0} ({1}期)'.format(obj.course,obj.semster)
def student_num(self,obj):
return obj.student_set.all().count()
例子2 批量初始化上課記錄
def init_course_record(self, request, queryset):
teacher_ids = [obj.id for obj in queryset]
bulk_list = []
class_lists = ClassList.objects.filter(teacher__id__in=teacher_ids)
for class_ in class_lists:
for teacher in queryset:
bulk_list.append(CourseRecord(class_obj=class_, teacher=teacher))
CourseRecord.objects.bulk_create(bulk_list)
init_course_record.short_description = '初始化上課記錄'
actions = [init_course_record, ]
例子3 考勤批量處理
def check_attendance(self,request,queryset):
queryset.update(record='noshow')
def check_vacate(self,request,queryset):
queryset.update(record='vacate')
def check_late(self,request,queryset):
queryset.update(record='late')
check_attendance.short_description = '缺勤批量處理'
check_vacate.short_description = '請假批量處理'
check_late.short_description = '遲到批量處理'
actions = [check_attendance,check_vacate,check_late]
10 顯示的 小圖標icon
xadmin/vendor/font-awesome
用最新版替換--圖標存放文件
model_icon 字段 = 'fa fa-icon'
指定 font-awesome 圖標
class CourseAdmin(object):
list_display = ['name']
list_filter = ['name']
search_fields = ['name']
model_icon = 'fa fa-leanpub' # #
11 獲取當前的user表model
from django.contrib.auth import get_user_model (獲取當前的user表model)
User = get_user_model()
site.register(User,Useradmin)
12 卸載注冊的model
from django.contrib.auth.models import User
xadmin.site.unregister(User)
13 替換默認的注冊 user(繼承了abstractuser)
class UserInfoAdmin(object):
list_display = ['auth','name','depart','email','username']
list_filter = ['auth','name','depart','email','username']
search_fields = ['auth','name','depart','email','username']
list_editable = ['auth','name','depart','email','username']
list_display_links = ['auth','name','depart','email','username']
model_icon = 'fa fa-user-circle-o'
from django.contrib.auth import get_user_model # 獲取當前的user_model
xadmin.site.unregister(get_user_model()) # 注銷 user
xadmin.site.register(UserInfo,UserInfoAdmin) # 注冊新的 user