使用Python Django框架制作一個音樂網站,
本篇主要是后臺對專輯、首頁輪播圖原有功能的基礎上進行部分功能實現和顯示優化。
目錄
專輯功能優化
新增編輯
專輯語種改為下拉選項
添加單曲優化顯示
新增單曲多選
更新歌手專輯數、專輯單曲數
獲取歌手專輯數
保存處理專輯數和單曲數
列表顯示
顯示專輯封面
顯示專輯所屬歌手
首頁輪播圖功能優化
字段顯示優化
記錄列表顯示圖片
總結
專輯功能優化
新增編輯
專輯語種改為下拉選項
修改專輯表模型Album 專輯語種字段,使用choices參數。
langs = [('國語', '國語'), ('普通話', '普通話'), ('英語', '英語'), ('日韓', '日韓')]
single_lang = models.CharField('專輯語種', max_length=50, choices=langs, help_text='請選擇專輯語種')
?效果:
添加單曲優化顯示
需要在添加專輯時,單曲選項顯示為單曲名稱;
還是去修改表模型,需要給單曲表設置返回格式。
單曲表模型增加str方法
def __str__(self):return self.name
新增單曲多選
添加或編輯數據時,選擇單曲可通過ctrl鍵來實現多選。
?查看數據庫表
更新歌手專輯數、專輯單曲數
在新增專輯后,同步更新所屬歌手擁有專輯數量。
在player/models.py中修改。
獲取歌手專輯數
def get_album_singler_num(singler_id):"""獲取專輯表中所屬歌手數:param singler_id::return:"""return Album.objects.filter(singler_id=singler_id).count()
保存處理專輯數和單曲數
在專輯表模型中重寫保存方法。
單曲數通過Singe字段獲取,是一個set類型;使用內置方法len計算數量。
?重寫save方法
def save(self, force_insert=False, force_update=False, using=None,update_fields=None):""" 重寫save方法 處理單曲數和歌手專輯數 """super().save()# 獲取選中的單曲字典sing_set = self.Singe.all()single_num = len(sing_set)# 更新單曲數self.single_num = single_num# 獲取所屬歌手專輯數album_num = get_album_singler_num(self.singler_id)super().save()# 更新歌手表-專輯數Singler.objects.filter(pk=self.singler_id).update(album_num=album_num)
列表顯示
顯示專輯封面
默認顯示的是專輯封面路徑。
修改player/admin.py中專輯后臺類中封面自定義返回。
內容如下:
def get_cover(self):return format_html('<img src="/media/{}" width="100px" height="100px"/>'.format(self.cover))
效果:
顯示專輯所屬歌手
默認列表顯示的專輯所屬歌手為外鍵id,需要顯示為歌手名稱。
修改player/admin.py中專輯后臺類中對歌手外鍵id返回,使用之前單曲顯示歌手方法即可。
內容如下:
def get_singler_id(self):return get_singler_name(self.singler_id)get_singler_id.short_description = '歌手'
效果:
首頁輪播圖功能優化
字段顯示優化
修改player/models.py文件中,首頁輪播圖表模型中字段顯示為設定的內容。
內容如下:
class Carousel(models.Model):""" 首頁輪播圖 """class Meta:verbose_name = '首頁輪播'verbose_name_plural = '首頁輪播'path = models.ImageField('輪播圖',upload_to=upload_save_path,help_text='請選擇上傳首頁輪播圖')href = models.CharField('跳轉路徑',max_length=100,help_text='請輸入點擊圖片后跳轉路徑'
記錄列表顯示圖片
修改player/admin.py文件;展示輪播圖列表中顯示路徑改為顯示圖片,
還是通過format_html。
內容如下:
class CarouselAdmin(admin.ModelAdmin):""" 后臺首頁輪播圖類 """def get_path(self):return format_html('<img src="/media/{}" width="200px" height="100px"/>',self.path,)get_path.short_description = '圖片路徑'def get_href(self):return self.hrefget_href.short_description = '跳轉路徑'# 顯示字段list_display = ['id', get_path, get_href]
效果:
總結
操作后臺管理自定義時,目前主要通過兩方面來改變,一個是表模型;另一個是通過后臺類。