Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django rest框架如何向request.data添加附加数据_Python_Django Rest Framework_Django Serializer - Fatal编程技术网

Python Django rest框架如何向request.data添加附加数据

Python Django rest框架如何向request.data添加附加数据,python,django-rest-framework,django-serializer,Python,Django Rest Framework,Django Serializer,我正在使用DRF和令牌认证系统来处理API。每当我从客户端发送数据时,它都会发送三个必填字段中的两个:title和name。但是由创建的由后端的request.user提供 因此,我需要以下内容,这当然不能像预期的那样起作用: class DefaultViewSet(ViewSet.ModelViewSet): """ API端点 """ queryset=Default.objects.all().order_by('-updated_at')) serializer\u class=Def

我正在使用DRF和令牌认证系统来处理API。每当我从客户端发送数据时,它都会发送三个必填字段中的两个:
title
name
。但是由创建的
由后端的
request.user
提供

因此,我需要以下内容,这当然不能像预期的那样起作用:

class DefaultViewSet(ViewSet.ModelViewSet):
"""
API端点
"""
queryset=Default.objects.all().order_by('-updated_at'))
serializer\u class=DefaultSerializer
权限\u类=[权限.已验证]
filterset_字段=[“创建人”、“标题”、“名称”]
def创建(self、request、*args、**kwargs):
request.data['created_by']=request.user.id
super().create(请求、*args、**kwargs)

由于我无法更改
request.data
对象,我应该完全重写
create
方法。因此,没有简单的方法来做前面的事情,对吗?或者有?

您应该重写
perform\u create
方法,该方法调用序列化程序的save方法并发送其他关键字参数,如下所示:

def perform_create(自、序列化程序):
request=serializer.context['request']
serializer.save(创建人=request.user.id)

原来的方法是:

def perform_create(self, serializer):
    serializer.save()

我只是在
create()
函数中通过在文档中使用来处理它:

def创建(self、request、*args、**kwargs):
serializer=DefaultSerializer(data=request.data,context={'request':request})
如果不是序列化程序,则。\u是否有效()
返回响应(serializer.errors,状态=400)
serializer.save(由=request.user创建)
返回响应({
“数据”:serializer.data
})

它无法达到该方法。我猜这是因为
perform\u create()
可以在通用视图中工作,但不能在视图集中工作……嗯,它应该。。。因为
viewsets.ModelViewSet
类继承自
mixin.CreateModelMixin
并且该类具有
create
perform\u create
方法。