扩展Django User模型引发HTTP 400错误,求排查方案
先看你视图里的这段核心代码:
u_id = request.user.authenticationkey url = "http://example.com/api/past24hrdialoguebyid/" + str(u_id) + "/?format=json"
这里的问题非常明显:request.user.authenticationkey获取到的是整个AuthenticationKey模型实例,而不是你需要的authentication_key字段值。当你用str(u_id)把它转成字符串时,得到的会是类似<AuthenticationKey object (1)>这样的内容——把这种格式的字符串拼到URL里,会导致请求的URL完全不符合后端API的预期,服务器自然会返回HTTP 400(Bad Request)错误。
修复方案
把获取字段的代码改成直接取authentication_key属性,同时建议用f-string拼接URL(比字符串相加更清晰易读):
# 直接提取具体的authentication_key字段值 u_key = request.user.authenticationkey.authentication_key # 用f-string拼接URL,避免格式错误 url = f"http://example.com/api/past24hrdialoguebyid/{u_key}/?format=json"
其他需要排查的补充点
AuthenticationKey实例是否存在:
因为你用的是OneToOneField,如果某个登录用户没有对应的AuthenticationKey记录,访问request.user.authenticationkey会抛出AuthenticationKey.DoesNotExist异常。如果你的项目有全局异常捕获把这类错误转成了400,也需要注意。可以加个判断确保实例存在:from django.shortcuts import get_object_or_404 @login_required(login_url='/login/') def home_page(request): # 若没有对应记录,直接返回404,更符合语义 auth_key_obj = get_object_or_404(AuthenticationKey, user=request.user) u_key = auth_key_obj.authentication_key # 后续代码...验证拼接后的URL格式:
修复后可以临时打印一下最终生成的URL,确认它是符合API要求的格式(比如http://example.com/api/past24hrdialoguebyid/abc123/?format=json),而不是带对象字符串的错误格式。检查API请求的其他细节:
虽然目前看核心问题是URL里的参数错误,但也可以快速确认下请求是否有其他不符合要求的参数或请求头——不过从你的代码来看,这个可能性比较低。
内容的提问来源于stack exchange,提问作者hackerman

