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

Django博客点赞按钮报错ValueError:无效整数字面量问题求助

问题分析与解决方案

嘿,我来帮你搞定这个点赞按钮的错误!

错误原因

你遇到的ValueError: invalid literal for int() with base 10: 'uien-jdhn-fds',核心原因非常明确:
在LikeView里的这行代码:

post = get_object_or_404(BlogPost, id=request.POST.get('blog_post_slug'))

BlogPost的id字段是Django自动生成的整数类型,但你传入的request.POST.get('blog_post_slug')是字符串格式的slug值(比如'uien-jdhn-fds'),Django尝试把这个字符串转成整数时自然会失败,就抛出了这个错误。

修改方案

方案1:直接修正查询字段(最快速的修复)

把查询条件里的id改成slug,因为你传入的是slug值,应该匹配对应的slug字段:

修改后的完整LikeView代码:

def LikeView(request, slug):
    context = {}
    # 将id改为slug,匹配传入的字符串slug值
    post = get_object_or_404(BlogPost, slug=request.POST.get('blog_post_slug'))
    if post.likes.filter(id=request.user.id).exists():
        post.likes.remove(request.user)
    else:
        post.likes.add(request.user)
    # 修正跳转参数:用实例post的slug,而非类字段BlogPost.slug
    return HttpResponseRedirect(reverse('HomeFeed:detail', args=[str(post.slug)]))

方案2:利用URL中的slug参数(更简洁规范)

其实你的LikeView已经从URL路径(<slug>/like/)获取到了slug参数,完全可以直接用这个参数查询,不用从POST里取,代码会更简洁:

def LikeView(request, slug):
    context = {}
    # 直接使用URL传入的slug参数查询文章
    post = get_object_or_404(BlogPost, slug=slug)
    if post.likes.filter(id=request.user.id).exists():
        post.likes.remove(request.user)
    else:
        post.likes.add(request.user)
    # 直接用slug参数跳转详情页
    return HttpResponseRedirect(reverse('HomeFeed:detail', args=[slug]))

这种情况下,你的表单代码可以保留原样,也可以去掉name="blog_post_slug"和value="{{blog_post.slug}}",因为已经不需要从POST传递slug了。

额外注意点

你原来的返回语句reverse('HomeFeed:detail',args=[str(BlogPost.slug)])有个小错误:BlogPost.slug是类的字段,不是具体实例的属性,必须用你查询到的post实例的post.slug,否则会触发新的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:22:27