上一篇我們已經初步的構建起了一個學生管理系統的模型,現在接著來繼續完善它吧。 1、上傳圖片/文件等資源 有時候需要添加一些附件,例如,新生剛入學,大家相互之間還不熟悉,希望能通過照片來加深印象,並且方便教學管理。 首先,對demo/urls.py文件進行改造,給urlpatterns添加static ...
上一篇我們已經初步的構建起了一個學生管理系統的模型,現在接著來繼續完善它吧。
1、上傳圖片/文件等資源
有時候需要添加一些附件,例如,新生剛入學,大家相互之間還不熟悉,希望能通過照片來加深印象,並且方便教學管理。
首先,對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模塊
import os
在models.py文件的Students類中添加一個路徑獲取的方法及models.ImageField欄位:
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)
同時同步一下資料庫操作,這樣頁面就多出一個照片上傳的選項了,選擇好照片並保存:
2、篩選、過濾、排序
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',)
這表示同時按照年齡和姓名欄位來排序。
二、定製網站信息
我們希望登錄網站的時候,顯示站點的名稱,修改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'
Xadmin入門就到此為止吧,在後續的博文中我會繼續深入講解Django+Xadmin的進階用法和操作。