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

Django中TypeError:get()缺少必填位置参数'id'的问题排查

解决Django中get() missing 1 required positional argument: 'id'的问题

嘿,我一眼就看出问题出在你的URL配置上了!Django的path()函数不支持正则表达式语法,你现在用的r'^api/(?P<id>\d+)$'这种正则写法,path()会把它当作普通的字符串路径来匹配,根本不会解析里面的(?P<id>\d+)分组,这就导致视图里的get()方法始终拿不到id参数,自然抛出那个TypeError了。

下面给你两种靠谱的解决办法:

方法1:用re_path()替代path()处理正则路径

re_path()是Django专门用来处理正则表达式路径的工具(和旧版本的url()是同一个东西)。修改你的urls.py如下:

from django.contrib import admin
from django.urls import path, re_path  # 别忘了导入re_path
from withoutrest import views

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^api/(?P<id>\d+)/$', views.EmployeeDetails.as_view()),  # 用re_path解析正则,末尾加/和你的测试请求对应
]

方法2:用path()的内置路径转换器(更简洁)

Django的path()支持多种内置路径转换器,比如<int:id>可以直接匹配整数类型的id,写法比正则清爽太多:

from django.contrib import admin
from django.urls import path
from withoutrest import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/<int:id>/', views.EmployeeDetails.as_view()),  # int转换器自动匹配整数id
]

另外还要提一句:你的测试代码test.py里请求的是BASE_URL + ENDPOINT + id + '/'(比如http://127.0.0.1:8000/api/1/),所以URL配置里要确保路径末尾带/,保持请求和路由的一致性哦。

最后小建议:模型类名employee改成Employee更符合Python的PEP8规范,虽然这不是当前错误的原因,但好习惯值得养成😊

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:08:11