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

Django报错TypeError: Field.__init__()收到意外关键字参数'id'原因排查

Django报错:TypeError: Field.init() got an unexpected keyword argument 'id' 原因解析

错误根源总结:

你的代码存在三处核心问题,共同触发了该报错:


1. User模型的__init__方法多余且错误

Django的Model类已实现完善的实例化逻辑,完全不需要手动重写__init__。你自定义的方法里:

def __init__(self, name, password, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.id = id  # 此处id是未定义变量,会先引发NameError
    self.name = name
    self.password = password
  • 手动赋值self.id = id中的id未定义,本身就存在语法错误;
  • 强制重写初始化逻辑会破坏Django模型字段的初始化流程,导致字段处理时传入非法参数。

解决:直接删除这个自定义的__init__方法


2. UserSerializer的__init__方法错误且多余

ModelSerializer不需要手动重写__init__,你写的方法里同样存在self.id = id的未定义变量问题,且当你用关键字参数传值实例化Serializer时,这些参数会被当成字段初始化参数传递给Field类,而Field的__init__方法不接受id这个参数——这就是报错的直接触发点。

解决:删除Serializer里自定义的__init__方法


3. Views中Serializer实例化方式错误

在find_user视图里,你错误地用关键字参数传递字段值:

user_serializer = UserSerializer(id=user.id, name=user.name, password=user.password)

ModelSerializer的正确实例化方式是传入instance参数(对应数据库实例),或data参数(对应待序列化字典)。正确写法:

user_serializer = UserSerializer(instance=user)
# 或简写为
user_serializer = UserSerializer(user)

额外补充:GET请求的request.body通常为空,用json.loads(request.body)会报错,应该用request.GET.get('id')获取URL参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:57:34