这些是我的PostSerializer中的字段
fields = ('id','user_id','title','desc','comments')
user_id
和comments
是生成的代码,title
、desc
是从api调用中获得的。我想将它作为附加值传递给我的request.data
。这是我的APIView对象
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_id
、comments
字段及其相应的值时。但是,在保存的数据库中,user_id
和comments
的值是null
。
如何在django rest框架中向序列化器对象添加和保存附加参数?
发布于 2020-11-21 01:07:07
方法1
您可以将其他字段传递给serializer.save()
,如下所示:
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_id
,comments
使序列化程序有效。
方法2
我不确定这个方法是否正确,但我建议您不要更改request.data
。首先复制它,然后对新字典进行更改。如下所示:
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()
,而不会丢失客户端的数据:
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)
https://stackoverflow.com/questions/64941012
复制