一、上傳圖片/文件等資源web
有時候須要添加一些附件,例如,新生剛入學,你們相互之間還不熟悉,但願能經過照片來加深印象,而且方便教學管理。數據庫
首先,對demo/urls.py文件進行改造,給urlpatterns添加static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT):瀏覽器
urlpatterns = [ path(r'', xadmin.site.urls), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
而後在demo/settings.py文件中添加網站
# 指定上傳位置 LOCATION = os.path.join('/', 'Users', 'babybus')
# 媒體文件根目錄 MEDIA_ROOT = os.path.join(LOCATION, 'Media') ROOT_URL = '/' MEDIA_URL = '/media/'
上傳圖片涉及到路徑的獲取,在models.py文件中導入os模塊url
import os
在models.py文件的Students類中添加一個路徑獲取的方法及models.ImageField字段:spa
def get_photo(self, filename): return os.path.join('photo', '%s_%s_%s_%s' % (self.class_name, self.name, self.id, os.path.splitext(filename)[1]))
photo = models.ImageField(verbose_name='照片', upload_to=get_photo, blank=True, null=True)
同時同步一下數據庫操做,這樣頁面就多出一個照片上傳的選項了,選擇好照片並保存:blog
二、篩選、過濾、排序排序
1)篩選圖片
今年學校的錄取率爆滿,生源特別好,要在一個數據庫中找到對應的學生,必然須要用到搜索功能。資源
修改adminx.py文件,在StudentsAdmin類中添加:
search_fields = ('name', )
要是咱們想經過班級或者學科來查找這個班級或者選修這門學科的全部學生,方法還會是同樣的嗎?咱們先試試:
search_fields = ('name', 'class_name', 'subjects',)
結果,報錯了:
這是怎麼回事呢?原來,咱們搜的「班級」和「學科」這兩個字段一個是外鍵一個是含有多對多關係,Student模型中的這兩個字段名稱並非其實際名稱,要在字段後加「__」兩個下劃線,而後再添加外鍵或多對多關係實際的字段名:
search_fields = ('name', 'class_name__class_name', 'subjects__name',)
如今妥妥的了。
2)過濾:
若是隻想查看學生表中的男生或者女生的信息,那就用到了過濾功能:
修改adminx.py文件,在StudentsAdmin類中添加:
list_filter = ('sex',)
3)排序:
若是想讓學生按某字段的順序來排序,一樣咱們須要在adminx.py文件中的StudentsAdmin類中添加ordering選項:
# 順序排序
ordering = ('age', 'name', )
# 逆序排序,在前面加一個減號"-",例如按年齡倒序排列
ordering = ('-age',)
這表示同時按照年齡和姓名字段來排序。
2、定製網站信息
咱們但願登陸網站的時候,顯示站點的名稱,修改adminx.py文件,添加LoginViewAdmin類,並註冊:
from xadmin.views.website import LoginView class LoginViewAdmin(LoginView): title = '學生信息管理系統' xadmin.site.register(LoginView, LoginViewAdmin)
還能夠繼續修改,例如瀏覽器標題和左上角的網頁標題以及頁腳的版權信息:
from xadmin.views import CommAdminView class GlobalSetting(CommAdminView): # 左上角及瀏覽器標題 site_title = '學生信息管理系統' # 頁腳版權信息 site_footer = 'Copyright © 2018 寶寶巴士' xadmin.site.register(CommAdminView, GlobalSetting)
左側邊欄若是之後項目愈來愈多了,有一個歸類會更好看些,也方便管理操做。這就須要在GlobalSetting類中添加
menu_style = 'accordion'