Django报错:codigo_cad期望数字类型却获取Customer对象求助
报错信息
Field 'codigo_cad' expected a number but got <Customer: 1>
问题根因
该报错和模型__str__方法返回字符串类型无关,本质是代码中给要求整数类型的codigo_cad字段传值时,传入了整个Customer模型实例,触发类型不匹配。
从已贴的代码可以定位到明确的错误点:视图层查询关联客户的写法不符合Django外键字段的取值规则。
# 错误代码片段 cliente = get_object_or_404(Customer,pk=venda.cliente_ven)
如果Venda模型的cliente_ven是指向Customer的外键字段,直接访问venda.cliente_ven返回的是关联的Customer模型实例,不是数据库中存储的整数字段值,把实例传给要求整数的pk参数自然会触发报错。
修复方法
- 优先用外键字段的
_id后缀取值,这是Django的原生设计,不会触发额外数据库联表查询,性能最优:
# 修正后代码 cliente = get_object_or_404(Customer, pk=venda.cliente_ven_id)
- 全局排查所有涉及
codigo_cad字段赋值、传参的位置,凡是传入Customer实例的地方,都改为取实例的对应属性值,即customer_obj.codigo_cad,禁止直接把整个模型实例传入字段。
无关代码说明
你贴出的模型层__str__、get_aniversario、get_customer_url、get_sale_customer_url方法本身逻辑没有问题,不需要调整,不用在这部分代码上消耗调试时间。
内容的提问来源于stack exchange,提问作者Davi Tito
相关产品推荐
相关产品推荐

