Django实现音乐网站 ⑼

news2024/11/29 10:34:48

使用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方法 处理单曲数和歌手专辑数 """

    # 获取选中的单曲字典
    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.href

    get_href.short_description = '跳转路径'

    # 显示字段
    list_display = ['id', get_path, get_href]

效果:

总结

操作后台管理自定义时,目前主要通过两方面来改变,一个是表模型;另一个是通过后台类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/857809.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实践指南-前端性能提升 270% | 京东云技术团队

一、背景 当我们疲于开发一个接一个的需求时&#xff0c;很容易忘记去关注网站的性能&#xff0c;到了某一个节点&#xff0c;猛地发现&#xff0c;随着越来越多代码的堆积&#xff0c;网站变得越来越慢。 本文就是从这样的一个背景出发&#xff0c;着手优化网站的前端性能&a…

java输出GB2312、GBK、GB18030、UTF-8所有的字符

相关文章 【转】彻底搞明白 GB2312、GBK 、GB18030和UTF-8 1.ASICII、GB2312、GBK、GB18030 以及 UTF8 的关系 2.编写代码 引入依赖&#xff1a;hutool工具类 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId>&…

企业内部FAQ常见问题展示分享的价值

企业内部FAQ&#xff08;常见问题&#xff09;展示分享是一种将常见问题和解决方案以问答形式呈现给员工的方式。这种方式可以帮助企业提高工作效率、提供一致的解决方案、提升员工满意度和减少重复工作。 企业内部FAQ常见问题展示分享的价值&#xff1a; 1. 提高工作效率 企…

恒盛策略:内盘是买入还是卖出?

内盘&#xff0c;又称成交明细&#xff0c;是指交易所实时发布的每一笔成交价格、交易时刻、成交量等具体数据。关于股民来说&#xff0c;每天重视内盘数据已成为必修课。可是&#xff0c;当看到内盘数据时&#xff0c;很多人都会困惑&#xff0c;到底内盘是买入还是卖出呢&…

PCI 简易通讯控制器有黄色感叹号

一、问题描述 设备管理器中&#xff0c;其他设备中显示 “PCI 简易通讯控制器”驱动未安装&#xff0c;显示黄色感叹号&#xff1a; 二、原因分析 右键该驱动&#xff0c;查看属性ID&#xff0c;显示为&#xff1a; PCI \ VEN_8086&#xff06;DEV_1C3A&#xff06;SUBSYS…

学习51单片机怎么开始?

学习的过程不总是先打好基础&#xff0c;然后再盖上层建筑&#xff0c;尤其是实践性的、工程性很强的东西。如果你一定要先全面打好基础&#xff0c;再学习单片机&#xff0c;我觉得你一定学不好&#xff0c;因为你的基础永远打不好&#xff0c;因为基础太庞大了&#xff0c;基…

3.多线程(进阶)

文章目录 1.常见的锁策略1.1乐观锁 vs 悲观锁1.2互斥锁 vs 读写锁1.3重量级锁 vs 轻量级锁1.4自旋锁vs 挂起等待锁&#xff08;Spin Lock&#xff09;1.5公平锁 vs 非公平锁1.6可重入锁 vs 不可重入锁1.7相关面试题 2.CAS2.1什么是 CAS2.2CAS 是怎么实现的2.3CAS 有哪些应用2.3…

这50幅画让你看清世界真相,犀利深刻,值得一读!

让你看清这个世界的真相&#xff01; 01 自弃者扶不起 自强者打不倒 02 人人都活在假象里 03 宁可有病再治&#xff0c;也不愿意未雨绸缪 04 一个人成熟的表现 是具备了太极思维 05 最大的监狱是人的思维监狱 06 认知太浅&#xff0c;放弃学习 这就是焦虑和绝望的根本原因 0…

智能型静电消除器的优势有哪些?

智能型静电消除器是一种使用先进技术和智能控制系统来消除静电问题的设备。静电是由于电荷不平衡而引起的现象&#xff0c;常见于工业生产、医疗设备、办公环境等场合。静电的存在可能导致电子设备故障、火灾、等问题。 智能型静电消除器与传统静电消除器相比&#xff0c;具有以…

Java gradle创建聚合项目(父子级项目)

放个简单的demo给大家下载吧。 参考大神gitee地址&#xff1a;demo-gradle-multi: Gradle构建SpringBoot多模块项目示例 (gitee.com)

近期学习练习

练习&#xff1a; 或&#xff1a; //sqrt是数学库函数&#xff0c;开平方 //头文件为math.h 或

固态激光雷达zvision_lidar lio-sam与fast-lio2对比

机械式激光雷达&#xff0c;可以根据ring提取边和面特征&#xff0c;固态式激光雷达实现特征检查需要的工作比较多&#xff0c;可以将降采样的都做为面特征进行处理。lio-sam添加固态雷达代码&#xff1a; 一、imageProjection.cpp (sensor SensorType::ZVISION) {pcl::move…

css冒号对齐

实现后的样式效果 实现方式 html&#xff1a; <el-col v-if"item.showInSingle ! false" :span"6" style"padding: 4px 0"><label>{{ item.label }}&#xff1a;</label><span v-if"singleData[item.prop] ! 0 &…

企业权限管理(四)-订单操作

订单操作 各种表之间的关系 订单查询流程 order-list.jsp界面 创建实体类 订单 package com.itheima.ssm.domain;import com.itheima.ssm.utils.DateUtils;import java.util.Date; import java.util.List;//订单 public class Orders {private String id;private String o…

Vue3 —— ref 全家桶及源码学习

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 本章 ref 全家桶 主要包括以下几个api 和 对应源码的学习&#xff1a; refisRefshallowReftriggerRefcustomRef 一、api 各自的使用 1、ref 使用 v…

【雕爷学编程】Arduino动手做(04)---震动传感器模块3

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

Word转PDF在线转换如何操作?分享转换技巧

现如今&#xff0c;pdf转换器已成为大家日常办公学习必不可少的工具&#xff0c;市场上的pdf转换器主要有两种类型&#xff0c;一种是需要下载安装的&#xff0c;另一种是网页版&#xff0c;打开就可以使用的&#xff0c;今天小编给大家推荐一个非常好用的网页版pdf转换器&…

【解决问题】手动执行maven命令安装指定jar包到本地仓库

背景&#xff1a; 有一个三方jar从远程仓库始终没有拉下来&#xff0c;没办法只能自己去下载&#xff0c;但是自己下载下来&#xff0c;不能直接建立个目录放到本地仓库&#xff0c;需要执行命令才行 操作 命令&#xff1a; mvn install:install-file -DgroupIdcom.alipay …

Java【Spring】使用类注解和方法注解, 更简单的存储和获取 Bean

文章目录 前言一、存储 Bean1, 配置文件2, 五大类注解Bean 的命名规则 3, 方法注解Bean 的命名规则 二、获取 Bean1, 属性注入2, Setter 注入3, 构造方法注入4, Autowired 和 Resource 的区别5, 同一个类型的多个 Bean 注入问题 总结 前言 各位读者好, 我是小陈, 这是我的个人主…

「2024」预备研究生mem-论证推理强化:评价类

一、论证推理强化&#xff1a;评价类 二、课后题