Django REST Framework传主键pk触发selected函数意外参数错误咨询
问题原因&解决步骤
- URL路由与视图参数匹配问题
DRF完全支持传递主键参数,你当前的参数报错首先来自路径参数传递的匹配异常,先做如下检查:
- 确认你修改完视图代码后已经重启了Django开发服务,旧代码缓存会导致参数定义不生效
- 路由配置建议补充末尾斜杠,符合Django默认路由规则:
# 应用内urls.py修改 path('selecteddevice/<int:pk>/', views.selected),
- ORM查询语法错误
all()方法是Django ORM中用于查询全量数据的方法,不接受任何过滤参数,你按主键过滤的写法需要替换为filter()方法:
# views.py中查询部分修改 # 错误写法 # devices = Device.objects.all(pk=pk) # devicedetail = DeviceDetail.objects.all(DD2DKEY=pk) # 正确写法 devices = Device.objects.filter(pk=pk) devicedetail = DeviceDetail.objects.filter(DD2DKEY_id=pk) # 外键直接查主键值加_id后缀效率更高
- 模型方法错误
你的DeviceDetail模型中__str__方法引用了不存在的hostname字段,该字段属于关联的Device模型,需要修改为:
# models.py中DeviceDetail的__str__修改 def __str__(self): return self.DD2DKEY.hostname
- 返回结果优化(可选)
你当前直接拼接两个不同结构的序列化结果,前端解析成本较高,建议包装为字典返回:
# views.py返回部分修改 results = { "device_base_info": devserializer.data, "device_detail_info": devdserializer.data } return Response(results)
内容的提问来源于stack exchange,提问作者L.Calvin
相关产品推荐
相关产品推荐

