Django:如何在视图集中获取当前用户ID

pau*_*bin 1 python django django-rest-framework

这是我使用rest_framwork 视图集的视图。我是这方面的初学者请帮忙。

这些是我的序列化器类。

from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token
from . import models

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'password')
        extra_kwargs = {'password': {'write_only': True, 'required': True}}
    
    def create(self, validated_data):
        user = User.objects.create_user(**validated_data)
        Token.objects.create(user=user)
        return user

class ToDoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.ToDo
        fields = ('id', 'user', 'title', 'date')
Run Code Online (Sandbox Code Playgroud)

这些是我的视图集类。

from rest_framework.permissions import AllowAny, IsAuthenticated
from rest_framework import viewsets
from . import serializers, models
from rest_framework.authentication import TokenAuthentication

# Create your views here.

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = serializers.UserSerializer
    permission_classes = (AllowAny, )

class ToDoViewSet(viewsets.ModelViewSet):
    queryset = models.ToDo.objects.all()
    serializer_class = serializers.ToDoSerializer
    authentication_classes = (TokenAuthentication, )
    permission_classes = (IsAuthenticated, )
Run Code Online (Sandbox Code Playgroud)

我不太明白如何根据当前登录的用户进行过滤。

Ale*_*ard 5

尝试这个

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = serializers.UserSerializer
    permission_classes = (AllowAny, )

    def get_queryset(self):                                            # added string
        return super().get_queryset().filter(id=self.request.user.id)   # added string


class ToDoViewSet(viewsets.ModelViewSet):
    queryset = models.ToDo.objects.all()
    serializer_class = serializers.ToDoSerializer
    authentication_classes = (TokenAuthentication, )
    permission_classes = (IsAuthenticated, )

    def get_queryset(self):                                            # added string
        return super().get_queryset().filter(user=self.request.user)   # added string
Run Code Online (Sandbox Code Playgroud)