【问题标题】:How to get user id in the serializer for the token authenticated user in DRF如何在序列化程序中为 DRF 中的令牌认证用户获取用户 ID
【发布时间】:2022-01-13 08:46:34
【问题描述】:

如何从序列化程序中的令牌中获取用户?我在视图中获取了 id,但我需要在序列化程序中在嵌套查询集的查询集中应用过滤器。

views.py

class UserListAPIView(generics.ListAPIView):
    permission_classes = (permissions.IsAuthenticated, jwtPermissions.IsSSOAdminOrReadOnly,)
    queryset = userModels.User.objects.all()
    serializer_class = serializers.UserSerializers
    
    def get_queryset(self):
        return self.queryset.filter(id=self.request.user.id) 

序列化器.py

class UserSerializers(serializers.ModelSerializer):
    class Meta:
        model = userModel.User
        fields = ('id','email','name','contact_no','address','is_active','solutions')

    def to_representation(self, instance):
        rep = super().to_representation(instance)
        rep['component'] = ComponentUserSerializers(instance.component.all(), many=True).data
        return rep

class ComponentUserSerializers(serializers.ModelSerializer):
    user_devices = serializers.SerializerMethodField()

    def get_user_devices(self, obj):
       #self.context['request'].user.id <-- getting null
        user_devices_queryset = sensorModel.UserSensorDevice.objects.filter(sensor_type=obj.id, user = self.context['request'].user.id)
        user_devices_serializer = sensorSerializers.UserSensorDeviceSerializer(user_devices_queryset, many=True)
        return user_devices_serializer.data

    class Meta:
        model = coreModel.Component
        fields = ('id','comp_code','part_no', 'user_devices')

我需要在 get_user_devices API 的 ComponentUserSerializer 中应用过滤器。而且我没有得到令牌认证用户的 user_id。

【问题讨论】:

  • 您使用的是用户序列化器,您需要在 listapiview 中使用 ComponentUserSerializers

标签: python django django-rest-framework


【解决方案1】:

我认为这可能有效

request = self.context.get('request', None)
if request.user is not None:
   print(request.user)
   print(request.user.id)

【讨论】:

    猜你喜欢
    • 2011-12-29
    • 2021-03-14
    • 1970-01-01
    • 2016-03-22
    • 2021-11-21
    • 2019-05-08
    • 1970-01-01
    • 2020-03-04
    • 2016-06-21
    相关资源
    最近更新 更多