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

Django报错:字段'id'期望数字却得到'create-room'求解决

问题解答:Field 'id' expected a number but got 'create-room'

错误原因

Django的URL路由是从上到下依次匹配的,你当前的urlpatterns里,path('room/<str:pk>/', ...)放在了path('create-room/', ...)前面。当访问/create-room/时,Django会把它匹配到room/<str:pk>/这条路由,将create-room作为pk参数传给room视图函数。而Room模型的id是整数类型,用字符串create-room查询自然会抛出类型不匹配的错误。

解决方法

调整URL路由顺序,把更具体的create-room路由移到room/<str:pk>/前面:

from . import views
from django.urls import path

urlpatterns = [
    path('', views.home, name='home'),
    path('create-room/', views.createRoom, name='create-room'),  # 调整到通用路由前
    path('room/<str:pk>/', views.room, name='room'),
]

额外优化:Room的id是整数,可把路由里的<str:pk>改成<int:pk>,让Django自动校验参数类型,避免非数字参数进入room视图:

path('room/<int:pk>/', views.room, name='room'),

补充说明

  • 路由匹配优先级由定义顺序决定,越具体的路由越要放在前面,防止被通用路由提前匹配。
  • 使用<int:pk>能在路由层面拦截非法请求,减少视图层的错误处理逻辑。

内容的提问来源于stack exchange,提问作者Nahi shady

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:40:27