Ish*_*are 2 django django-models django-serializer django-rest-framework
我试图通过以下方式返回当前登录用户的详细信息:
from .serializers import UserSerializer
class UserDetailsView(RetrieveAPIView):
model = User
queryset = User.objects.all()
permission_classes = [permissions.IsAuthenticated]
serializer_class = UserSerializer
def get(self, request, *args, **kwargs):
user = User.objects.get(id=request.user.id)
print(user)
return Response(user)
Run Code Online (Sandbox Code Playgroud)
在 serializers.py 我使用过 ModelSerializer
class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
def create(self, validated_data):
user = UserModel.objects.create(username=validated_data['username'])
user.set_password(validated_data['password'])
user.save()
return user
class Meta:
model = UserModel
fields = ('id', 'username', 'password')
write_only_fields = ('password',)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误Object of type 'User' is not JSON serializable。我的用例有什么问题?
你需要返回
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
在 UserDetailsView 下的 get 函数中。更多细节在这里。
DRF 响应应该是类似 JSON 的对象,要将模型实例转换为它,您可以使用 seralizer 类:
def get(self, request, *args, **kwargs):
user = User.objects.get(id=request.user.id)
serializer = self.get_serializer(user)
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
另外,您不需要额外的查询来获取当前用户,您可以request.user直接使用:
serializer = self.get_serializer(request.user)
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9177 次 |
| 最近记录: |