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(数字)时失败,触发错误。
修复步骤
替换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')修正URL路径的转义问题
urls.py里的路径'user/<str:username>'是转义后的写法,改成正常格式:path('user/<str:username>', UserPostListView.as_view(), name='user_posts'),(可选)遵循Django命名规范
Django模型类名建议首字母大写,把class post(models.Model)改成class Post(models.Model),同时同步修改views.py里的模型引用(model = post改为model = Post),提升代码可读性和维护性。
验证修改
重启Django服务后,访问/user/Imnew路径,应该能正常展示该用户的所有帖子,不会再触发TypeError。
内容的提问来源于stack exchange,提问作者Rin Hyakuya
相关产品推荐
相关产品推荐

