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

Django应用报错TypeError: 'dict_keys'不可下标访问求助

解决Django中TypeError: 'dict_keys' object is not subscriptable错误

错误详情

报错栈:

File "C:\Users\User\Desktop\erkin2\venv\lib\site-packages\routers\router.py", line 27, in db_for_read
    return settings.DATABASES.keys()[0]
TypeError: 'dict_keys' object is not subscriptable

尝试调用keys()方法时,还收到提示:

function has no attribute keys().

问题原因

  1. 核心错误:Python3中,dict.keys()返回的是dict_keys视图对象,它支持迭代但不支持下标访问,所以keys()[0]会触发TypeError。
  2. URL配置存在语法错误:代码中有重复的path配置块,会导致解析失败。

解决方案

1. 修复数据库路由代码

找到虚拟环境中routers/router.py文件的db_for_read方法,将return settings.DATABASES.keys()[0]替换为以下任意一种写法:

方法一:转换为列表后取下标

return list(settings.DATABASES.keys())[0]

方法二:通过迭代器获取第一个元素

return next(iter(settings.DATABASES.keys()))

2. 修正URL配置中的语法错误

删除重复的代码块,正确的urlpatterns如下:

from django.urls import path
from .views import *
from rest_framework import routers

userl = UserViewSet.as_view({'get': 'list'})
userd = UserViewSet.as_view({'get': 'retrieve'})

router = routers.SimpleRouter()
router.register(r'users', UserViewSet, basename='user')

urlpatterns = [
  path('users/', userl, name='user-list'),
  path('users/<int:pk>/', userd, name='user-detail'),
  path('register',RegisterUserAPIView.as_view()),
  path('login/', LoginAPIView.as_view()),
  path('logout', LogoutAPIView.as_view()),
  path('products', ProductsViewSet.as_view({'get': 'list'})),
]
# 若要使用router注册的路由,添加以下代码
# urlpatterns += router.urls

额外说明

若你遇到function has no attribute keys()提示,大概率是误将settings.DATABASES当成函数调用(比如写成settings.DATABASES()),检查代码确保是直接访问settings.DATABASES这个字典对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:18:08