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

Django id期望数字报错、blog_id获取失败问题解决方案

问题原因

两个报错同源,都是参数处理不当导致的:

  • 前端发起POST请求到点赞接口时,要么没传blog_id参数,要么传的是空字符串
  • 直接把取到的空字符串作为id条件查询Blog模型,而id是数字类型字段,接收到空字符串就会抛出Field 'id' expected a number but got ''异常,本质就是拿不到合法的blog_id参数。
修复步骤
  • 第一步:排查前端传参
    不管是用原生表单提交还是ajax/fetch发异步请求,必须保证请求里携带值为当前博客数字ID的blog_id字段。原生表单提交需要加隐藏域存储博客id,参考写法:

    <form method="POST" action="/你配置的点赞路由地址/">
        {% csrf_token %}
        <input type="hidden" name="blog_id" value="{{ 模板中当前博客对象.id }}">
        <button type="submit">点赞</button>
    </form>
    

    如果是异步请求,检查请求体里有没有正确写入blog_id字段,不要传null或者空字符串。

  • 第二步:后端加参数校验兜底
    不要直接把request.POST取到的参数直接丢给ORM查询,先做合法性校验,避免非法值直接触发报错,修改后的视图代码参考:

    from django.http import HttpResponseBadRequest
    
    def like_post(request):
        blog_id = request.POST.get('blog_id')
        # 空值直接返回400错误
        if not blog_id:
            return HttpResponseBadRequest("缺少必填参数blog_id")
        # 非数字格式直接拦截
        if not blog_id.isdigit():
            return HttpResponseBadRequest("blog_id必须为数字")
        # 参数合法再执行查库操作
        post = get_object_or_404(Blog, id=int(blog_id))
        # 后续编写点赞计数、返回响应的业务逻辑即可
    
  • 额外优化点
    模型里的like_count字段默认值写的是字符串'0',虽然Django能做隐式转换,但建议直接写成数字0,避免潜在的类型问题:

    like_count = models.BigIntegerField(default=0)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:36:20