You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django前端Playlist字段显示null但后台有有效值问题求助

问题解决:前端播放列表字段显示null的原因及修复

问题根源

你在视图中使用Composition.objects.all().values()获取数据时,Django的values()方法默认仅包含当前模型的字段。对于playlist这个ForeignKey字段,它默认存储的是关联PlayList对象的ID(对应字段名是playlist_id),而非播放列表的名称。因此前端代码中尝试访问musics[compositionIndex].playlist时,该键不存在,最终显示为null。

修复步骤

1. 修改视图查询,包含播放列表名称

将视图中composition_list的查询语句修改为明确指定所需字段,包括关联的播放列表名称:

def homepage(request):
    composition = Composition.objects.all()
    # 明确指定字段,通过双下划线获取关联模型的name字段
    composition_list = list(Composition.objects.all().values(
        'id', 'title', 'artist', 'time_length', 'audio_file', 'cover_image',
        'playlist__name'  # 获取播放列表名称
    ))
    return render(request, 'base.html', {
        'composition': composition,
        'composition_list': composition_list
    })

如果希望前端使用更友好的字段名,可通过F()表达式给字段起别名:

from django.db.models import F

def homepage(request):
    composition = Composition.objects.all()
    composition_list = list(Composition.objects.all().values(
        'id', 'title', 'artist', 'time_length', 'audio_file', 'cover_image',
        playlist_name=F('playlist__name')  # 给字段起别名
    ))
    return render(request, 'base.html', {
        'composition': composition,
        'composition_list': composition_list
    })

2. 修改前端JS代码,匹配正确字段名

如果使用第一种方式(字段名为playlist__name),修改setSRC函数:

const setSRC = () => {
    player.src = `{{ MEDIA_URL }}/${musics[compositionIndex].audio_file}`
    song_title.textContent = musics[compositionIndex].title
    artist.textContent = musics[compositionIndex].artist
    music_img.setAttribute('src', `{{ MEDIA_URL }}/${musics[compositionIndex].cover_image}`)
    playlist_name.textContent = musics[compositionIndex].playlist__name  // 替换为对应字段
}

如果使用别名playlist_name,则修改为:

playlist_name.textContent = musics[compositionIndex].playlist_name

额外优化建议

给PlayList模型添加__str__方法,方便在admin及其他场景下直观查看播放列表名称:

class PlayList(models.Model):
    name = models.CharField(max_length=500)
    
    def __str__(self):
        return self.name

内容的提问来源于stack exchange,提问作者Nitrolacs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:26:05