我可以像这样在Django rest API中自动提供当前用户吗?

vngu2lb8  于 2023-01-10  发布在  Go
关注(0)|答案(1)|浏览(146)

我有一个Django rest API。在我的模型中,我有一个用户作为外键。当我用的时候,我不希望用户需要提供他自己的用户。但是如果用户不提供他的用户凭证,序列化程序将无效,因此不会保存。我发现我们可以在用initial_data验证之前访问序列化的数据,所以我这样做是为了从提供的令牌自动保存用户。用户需要提供除自己用户之外的所有信息。这样可以吗?或者我做了一些不推荐的事情?

@api_view(['POST'])
@permission_classes([IsAuthenticated])
def add_mesure(request):
    serializer = MesureSerializer(data=request.data)
    serializer.initial_data['user'] = request.user.id
    if serializer.is_valid():
        serializer.save()
    return Response(serializer.data)
58wvjzkj

58wvjzkj1#

由于您已经将令牌作为用户验证的一种形式,因此您可以省略序列化器中的user字段(否则,用户可能会输入其他人的id),然后将请求对象传递给序列化器,以便在保存时从中获取用户。

#serializer
class MesureSerializer(ModelSerializer):
    class Meta:
        exclude = ['user',]
    ...
    def create(self, validated_data):
       validated_data['user'] = self.context['request'].user
       return super().create(validated_data)

此外,要传递request的值,可以使用序列化程序的context参数。

#view
serializer = MesureSerializer(data=request.data, context={'request':request})

相关问题