【发布时间】: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