首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在django rest框架中向序列化器对象添加和保存附加参数?

如何在django rest框架中向序列化器对象添加和保存附加参数?
EN

Stack Overflow用户
提问于 2020-11-21 08:10:54
回答 1查看 877关注 0票数 1

这些是我的PostSerializer中的字段

代码语言:javascript
运行
复制
fields = ('id','user_id','title','desc','comments')

user_idcomments是生成的代码,titledesc是从api调用中获得的。我想将它作为附加值传递给我的request.data。这是我的APIView对象

代码语言:javascript
运行
复制
class PostView(APIView):
    permission_classes = (IsAuthenticated,) 
    def post(self,request):
        request.data['user_id'] = request.user.id
        request.data['comments'] = "machine generated"
        post_serializer = PostSerializer(data=request.data)
        if post_serializer.is_valid():
            post_serializer.save()
            print(request.data)
            return Response(post_serializer.data)

当我的print(request.data)显示user_idcomments字段及其相应的值时。但是,在保存的数据库中,user_idcomments的值是null

如何在django rest框架中向序列化器对象添加和保存附加参数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-21 09:07:07

方法1

您可以将其他字段传递给serializer.save(),如下所示:

代码语言:javascript
运行
复制
class PostView(APIView):
    permission_classes = (IsAuthenticated,) 
    def post(self,request):
        post_serializer = PostSerializer(data=request.data)
        if post_serializer.is_valid():
            post_serializer.save (
            
            user_id=request.user_id,
            comments="machine generated"
            
            )
            return Response(post_serializer.data)

但是通过这种方法,您应该使blank=True用于user_idcomments使序列化程序有效。

方法2

我不确定这个方法是否正确,但我建议您不要更改request.data。首先复制它,然后对新字典进行更改。如下所示:

代码语言:javascript
运行
复制
class PostView(APIView):
    permission_classes = (IsAuthenticated,) 
    def post(self,request):
        data = dict(request.data)
        data['user_id'] = request.user.id
        data['comments'] = "machine generated"

        post_serializer = PostSerializer(data=data)
        if post_serializer.is_valid():
            post_serializer.save()
            return Response(post_serializer.data)

方法3

您可以使用request.data方法更改.update(),而不会丢失客户端的数据:

代码语言:javascript
运行
复制
class PostView(APIView):
    permission_classes = (IsAuthenticated,) 
    def post(self,request):
        request.data.update ( {

            'user_id': request.user.id,
            'comments': "machine generated text"

        } )

        post_serializer = PostSerializer(data=request.data)
        if post_serializer.is_valid():
            post_serializer.save()
            print(request.data)
            return Response(post_serializer.data)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64941012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档