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

Django报错:TypeError: Field 'id'预期数字却得到[<User: Imnew>]求解决

问题解决:TypeError: Field 'id' expected a number but got [<User: Imnew>]

错误原因

在UserPostListView的get_queryset方法里,你用了get_list_or_404,这个函数返回的是用户列表(哪怕只有一个匹配用户)。但post模型的author是外键,关联的是单个User对象,当你执行post.objects.filter(author=user)时,user是列表而非单个对象,导致Django试图把列表转成用户ID(数字)时失败,触发错误。

修复步骤

  1. 替换get_list_or_404为get_object_or_404
    修改views.py中的UserPostListView代码:

    def get_queryset(self):
        # 获取单个用户对象,而非列表
        user = get_object_or_404(User, username=self.kwargs.get('username'))
        return post.objects.filter(author=user).order_by('-date_posted')
    
  2. 修正URL路径的转义问题
    urls.py里的路径'user/&lt;str:username&gt;'是转义后的写法,改成正常格式:

    path('user/<str:username>', UserPostListView.as_view(), name='user_posts'),
    
  3. (可选)遵循Django命名规范
    Django模型类名建议首字母大写,把class post(models.Model)改成class Post(models.Model),同时同步修改views.py里的模型引用(model = post改为model = Post),提升代码可读性和维护性。

验证修改

重启Django服务后,访问/user/Imnew路径,应该能正常展示该用户的所有帖子,不会再触发TypeError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:13:31