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

Django音乐web应用移除收藏功能报song_id类型错误求助

报错根因

直接触发报错的原因是:移除收藏的表单没有正确传递数字类型的song_id参数,反而将提交按钮的文本值Remove from Favourites传递到了视图期望接收数字song_id的位置,触发了类型不匹配错误。
同时代码还存在以下多个逻辑错误:

  • Song模型的主键为自定义的song_id,模板中错误使用{{song.id}}无法获取到有效值
  • 移除收藏的表单未设置action属性,无法将请求发送到对应视图路由
  • 视图逻辑错误删除了歌曲本身的Song记录,而非删除用户的Favourites收藏关联记录
  • 查询时错误使用不存在的id字段过滤Song模型
修复步骤

1. 修复前端移除收藏模板

将原有移除表单替换为以下代码:

<form action="{% url 'remove_from_favourite' song.song_id %}" method="post">
{% csrf_token %}
<button type="submit" class="btn btn-outline-danger">Remove from Favourites</button>
</form>

2. 配置对应路由(music/urls.py)

添加移除收藏功能的路由规则:

from django.urls import path
from . import views

urlpatterns = [
    # 保留原有其他路由配置
    path('remove_fav/<int:song_id>/', views.remove_from_favourite, name='remove_from_favourite'),
]

3. 修复移除收藏视图逻辑

替换原有remove_from_favourite函数,仅删除用户的收藏关联记录,不要删除歌曲本身:

def remove_from_favourite(request, song_id):
    if request.method == "POST":
        # 过滤当前用户对指定歌曲的收藏记录并删除
        Favourites.objects.filter(user=request.user, video_id=str(song_id)).delete()
        messages.success(request, "Removed from favorite!")
        # 跳转回收藏列表页即可,无需传递song_id参数
        return redirect('favourite')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:57:02