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

RawQueryset失效触发ProgrammingError:参数绑定类型不支持问题排查

问题解决:Django RawQueryset 触发 ProgrammingError 错误

错误根源

  1. 参数传递错误:views.py中sizes的Raw查询里,你传入了[id]作为参数,但这里的id是Python内置的id()函数(并非产品ID数值),数据库无法识别函数对象,因此抛出Error binding parameter 1: type 'builtin_function_or_method' is not supported错误。
  2. 模板字段访问错误:模板中{{rs.size_id.title}}逻辑有误——size_id是整数类型的外键ID,不存在title属性,需访问关联的Size对象字段。

修复方案

方案1:修正Raw查询参数

将[id]替换为[product.id],确保传递的是产品ID数值:

if product.variant != "None":
    variants = Variants.objects.filter(product_id=product.id)
    colors = Variants.objects.filter(product_id=product.id, size_id=variants[0].size_id)
    # 修正参数为 product.id
    sizes = Variants.objects.raw("SELECT * FROM core_variants WHERE product_id=%s GROUP BY size_id", [product.id])
    variant = Variants.objects.get(id=variants[0].id)
context = {'sizes': sizes,
            'colors': colors,
            'variant': variant,
          }

return render(request, 'core/product-details.html', context)

同时修正模板字段访问(前提是Variants模型中size是指向Size模型的外键):

<select name="size" id="size" class="form-control">
    {% for rs in sizes %}
    <option {% if variant.size_id == rs.size_id %}selected{% endif %} value="{{rs.size_id}}">{{rs.size.title}}</option>
    {% endfor %}
</select>

方案2:(推荐)用Django ORM替代Raw查询

Raw查询存在SQL注入风险,更推荐用ORM的values()+distinct()实现分组逻辑:

if product.variant != "None":
    variants = Variants.objects.filter(product_id=product.id)
    colors = Variants.objects.filter(product_id=product.id, size_id=variants[0].size_id)
    # 用ORM实现分组去重
    sizes = Variants.objects.filter(product_id=product.id).values('size_id', 'size__title').distinct('size_id')
    variant = Variants.objects.get(id=variants[0].id)
context = {'sizes': sizes,
            'colors': colors,
            'variant': variant,
          }

return render(request, 'core/product-details.html', context)

对应模板调整为:

<select name="size" id="size" class="form-control">
    {% for rs in sizes %}
    <option {% if variant.size_id == rs.size_id %}selected{% endif %} value="{{rs.size_id}}">{{rs.size__title}}</option>
    {% endfor %}
</select>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:27:16