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 LoginViewclass 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)
?
?
具體源碼內容? 請關注學長公眾號回復“Django”
?
公眾號二維碼? ? ? ? ? ? ? ? ?
?
?左側邊欄如果以后項目越來越多了,有一個歸類會更好看些,也方便管理操作。這就需要在GlobalSetting類中添加
menu_style = 'accordion'