我有一个由 oauth2_provider.ext.rest_framework.OAuth2Authentication
验证的项目.请求 header 中有一个用于身份验证和识别的 token 。我认为在处理创建操作时,我不应该在请求数据中明确包含用户 ID。但是序列化程序需要用户信息来创建新实例。所以我在序列化程序中包含了一个 user_id 字段,并将值放入 request.data
验证后输入字典。
好吗?有没有更好的办法?
序列化程序.py
class serializer(serializers.Serializer):
user = UserSerializer(read_only=True)
user_id = serializers.UUIDField(write_only=True)
content = serializers.CharField()
View .py
class CommentList(generics.ListCreateAPIView):
def create(self, request, *args, **kwargs):
request.data['user_id'] = request.user.id
return super(CommentList, self).create(request)
最佳答案
覆盖更干净create(validated_data)
在您的序列化程序中:
class CommentSerializer(serializers.Serializer):
...
def create(self, validated_data):
user = self.context['request'].user
comment = Comment.objects.create(
user=user,
**validated_data
)
return comment
见 http://www.django-rest-framework.org/api-guide/serializers/#saving-instances
然后你不需要自定义你的 View ,你可以只使用通用 View 。
关于django - 如何将用户 ID 传递到带有请求数据的序列化程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42914596/