python - Django TypeError Field 'id' 需要一个数字,但得到了
问题描述
错误:TypeError: Field 'id' expected a number but got <class 'account.models.User'>.
我一直在阅读身份验证文档,并且一直收到该错误。我已经尝试了一些不同的排列,但我真的不确定出了什么问题,除了它显然是一个类型错误。
最终目标是只返回新创建用户的“id”和“email”以及令牌,由于这个错误,我还无法测试返回的令牌,但我想应该是好的。
正在工作的是它成功地将一个新用户发布到数据库中,并在另一个表中使用一个具有匹配键的令牌,现在我有大约 50 个用户来自测试和搞乱。
旁注我已经覆盖了默认的用户 Django 设置你,但我遵循了文档,所以代码应该是可靠的,但如果需要我显然可以发布它
视图.py
from rest_framework import status
from .models import User
from .serializers import UserSerializer, RegisterSerializer
from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework.authtoken.models import Token
@api_view(['POST',])
def RegisterAPI(request):
if request.method == 'POST':
serializer = RegisterSerializer(data = request.data)
if serializer.is_valid(raise_exception=True):
user = serializer.save()
content = {
'user': {'id': user.pk, 'email': user.email},
'auth': Token.objects.get(user = User).key
}
# Return the reponse
return Response(content)`
序列化程序.py
from rest_framework import serializers
from django.contrib.auth import get_user_model
from django.contrib.auth import authenticate
from .models import User
# Register Serializer
class RegisterSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'email', 'password')
extra_kwargs = {'password':{'write_only': True}}
def save(self):
user = User(
email = self.validated_data['email'],
)
password = self.validated_data['password']
user.set_password(password)
user.save()
return user
# User Serializer
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('email')
解决方案
您正在将User
模型类传递给.get(...)
方法,但它应该是刚刚从序列化程序获得的User
模型实例。
@api_view(['POST', ])
def register_api(request):
if request.method == 'POST':
serializer = RegisterSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
content = {
'user': {'id': user.pk, 'email': user.email},
'auth': Token.objects.get(user=user).key
}
# Return the reponse
return Response(content)
推荐阅读
- math - 将正则表达式 a*b* + b*a* 转换为有限状态自动机
- java - 使用 BouncyCastle java API 进行 PGP 签名并使用 gpg4win 进行验证不起作用
- android - 添加库时的 FirebaseInitProvider 错误
- python - 如何修复 Modelformset 验证中的错误“'id': Select a valid choice”?
- c++ - C++ 中附加 char* 的奇怪输出
- javascript - 如何有效且非阻塞地填充数组
- python - Python。硒。拖放错误“AttributeError:move_to 需要 WebElement”
- reactjs - ProtectedRoutes 函数。如何调用 redux useSelector()
- laravel - Laravel - 如何从存储中下载示例 Excel 文件
- c++ - delete的[]应该放在哪里?