Django实现音乐网站 ⑽

使用Python Django框架制作一个音乐网站,

本篇主要是后台对歌曲类型、歌单功能原有功能进行部分功能实现和显示优化。

目录

歌曲类型功能优化

新增编辑

优化输入项标题显示

父类型显示改为下拉菜单

列表显示

父类型显示名称

过滤器增加父类型

歌单表功能优化

新增编辑

单曲选项增加歌手名称

歌单类型选项名称修改

字段显示名称修改

播放量改为不可编辑

歌单增加描述字段

首先表模型中增加描述字段

执行表迁移

列表显示

显示播放量、添加时间

显示编辑时间、歌单描述

歌单封面改为显示图片

总结


歌曲类型功能优化

新增编辑

优化输入项标题显示

把显示字段名称改为显示名称

内容如下:

class SongCategory(models.Model):
    """ 歌曲类型表 """

    class Meta:
        verbose_name = '歌曲类型'
        verbose_name_plural = '歌曲类型'

    name = models.CharField('类型名称', max_length=100, help_text='请输入类型名称')
    pid = models.IntegerField('父类型id', default=0, help_text='父类型')

效果:

父类型显示改为下拉菜单

父类型字段增加choice参数,就可变成下拉菜单选项,需要注意字段类型为tuple。

内容如下:

categoryChoice = [
    (0, '默认'), 
    (1, '主题'), 
    (2, '心情'),
    (3, '场景'),
    (4, '年代'),
    (5, '曲风流派'), 
    (6, '语言')
]
pid = models.IntegerField(
    '父类型', 
    default=0, 
    help_text='父类型',
    choices=categoryChoice
)

效果:

原本想做成表模型调用自己的父类型组成列表来展示和添加;结果发现表模型没创建时候,这个表模型是不存在的,也就无法调用,暂时先做成固定父类型,添加子类型。

列表显示

父类型显示名称

默认显示父类型是类型id,改为显示类型名称。

修改player/admin.py中的歌曲类型后台类中对pid字段返回内容。

class SongCategoryAdmin(admin.ModelAdmin):
    """ 后台歌单类型类 """

    def get_name(self):
        return self.name

    get_name.short_description = '类型名称'

    def get_pid(self):
        categoryChoice = [
            (0, '默认'),
            (1, '主题'),
            (2, '心情'),
            (3, '场景'),
            (4, '年代'),
            (5, '曲风流派'),
            (6, '语言')
        ]
        for index, item in categoryChoice:
            if index == self.pid:
                return item

    get_pid.short_description = '父类型'

效果:

过滤器增加父类型

过滤器中增加pid字段设置,可以设置在name的前面。

内容如下:

list_filter = ['pid', 'name']

效果:

歌单表功能优化

新增编辑

单曲选项增加歌手名称

修改单曲表字符串返回格式。

内容如下:

class Singe(BaseModel):
    """ 单曲表 """

    ......

    def __str__(self):
        return str(self.name) + ' - ' + str(self.singler)

效果:

歌单类型选项名称修改

默认显示对象,需要修改歌曲类型表模型类,增加__str__方法,设置返回格式。

内容如下:

def __str__(self):
    return self.name

效果:

字段显示名称修改

默认显示字段名称,需要改成字段表述的内容,这样便于理解和编辑。

 

修改player/models.py中歌单表模型类,设置字段的verbose_name属性。

内容如下:

class SongSheet(BaseModel):
    """ 歌单表 """

    class Meta:
        verbose_name = '歌单'
        verbose_name_plural = '歌单'

    name = models.CharField('歌单名称', max_length=100, help_text='请输入歌单名称')
    cover = models.ImageField('歌单封面图',upload_to=upload_save_path, help_text='请上传歌单封面图')
    playnum = models.IntegerField('播放量', default=0, help_text='请输入播放量')
    is_default = models.IntegerField('默认', default=0, choices=[('0', '是'), ('1', '否')], help_text='是否默认')

    # 歌曲类型与歌单表 多对多关系
    category = models.ManyToManyField('SongCategory', verbose_name='所属类型')

    # 歌单表与单曲表多对多关系
    singe = models.ManyToManyField('Singe', verbose_name='包含单曲')

效果:

播放量改为不可编辑

播放量是由前端查看歌单后增加数量,后台不能编辑。

需要设定播放量字段的editable为False。

内容如下:

playnum = models.IntegerField(default=0, editable=False)

保存后,新增和编辑中播放量填写项不再显示。

歌单增加描述字段

刚发现设计表时候没有歌单描述字段,现在加上。

首先表模型中增加描述字段

内容如下:

esc = models.TextField('歌单描述', default='', max_length=200, help_text='请输入歌单描述')

注意:需要设置默认,否则无法执行。

执行表迁移

表模型发生改变后,需要创建表迁移文件和执行表迁移。

python manage.py makemigrations
python manage.py migrate

数据表增加desc字段

列表显示

显示播放量、添加时间

显示编辑时间、歌单描述

修改player/admin.py中歌单表后台类。

内容如下:

class SongSheetAdmin(admin.ModelAdmin):
    """ 后台歌单类 """

    def get_name(self):
        return self.name

    get_name.short_description = '类型名称'

    def get_cover(self):
        return format_html(
            '<img src="/media/{}" width="100px" height="100px"/>',
            self.cover,
        )

    get_cover.short_description = '歌单封面'

    def get_desc(self):
        return self.desc

    get_desc.short_description = '歌单描述'


    def get_playnum(self):
        return self.playnum

    get_playnum.short_description = '播放量'

    def get_addtime(self):
        return self.addtime

    get_addtime.short_description = '创建时间'

    def get_updatetime(self):
        return self.updatetime

    get_updatetime.short_description = '编辑时间'

    # 显示字段
    list_display = ['id', get_name, get_cover, get_desc, get_playnum, get_addtime, get_updatetime]

效果:

歌单封面改为显示图片

修改player/admin.py中歌单表后台类;把封面方法返回内容改为img元素。

内容如下:

def get_cover(self):
    return format_html(
        '<img src="/media/{}" width="100px" height="100px"/>',
        self.cover,
    )

 效果:

总结

至此后台功能开发和优化算基本完成,之后开始前端方面开发。

猜你喜欢

转载自blog.csdn.net/json_ligege/article/details/132212129