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

Django出现Field 'id' expected a number报错,slug处理无效如何解决?

问题产生原因
  • 路由传入视图的user参数是用户名字符串(报错信息中的yoavlv就是用户名),而Add_Item的user字段是关联User表的外键,Django外键查询默认匹配关联表的主键id(数字类型),直接传入字符串会触发类型不匹配错误。
  • 视图逻辑存在错误:你先调用get_object_or_404(Add_Item, user=user)查询的是Add_Item实例,再拿这个实例作为过滤条件查Add_Item的逻辑完全冗余,且方向错误,你要实现的是查询指定用户的所有发布内容,不是先查一条发布内容再找同用户的内容。
  • 之前用slug方案未生效的核心原因是没有明确指定查询匹配slug字段,还是默认用id匹配,所以同样会触发类型错误。
修复方案

直接调整视图查询逻辑即可,有两种常用写法:

  1. 先查询对应用户实例再过滤
from django.contrib.auth.models import User
from django.shortcuts import get_object_or_404, render
from .models import Add_Item

def my_items(request, user):
    # 用传入的用户名匹配User表的username字段,拿到用户实例
    target_user = get_object_or_404(User, username=user)
    # 过滤该用户发布的所有内容
    items = Add_Item.objects.filter(user=target_user)
    return render(request, 'my_items.html', {"items": items})
  1. 直接跨表查询(无需单独查询User实例)
from django.shortcuts import render, Http404
from .models import Add_Item

def my_items(request, user):
    # 双下划线指定关联User表的username字段进行匹配
    items = Add_Item.objects.filter(user__username=user)
    if not items.exists():
        raise Http404("未找到对应用户的发布内容")
    return render(request, 'my_items.html', {"items": items})

如果要继续使用slug方案,只需要确保路由传参是slug值,查询时用user__slug=传入的slug参数的写法明确指定匹配slug字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:09:04