我们如何在django rest框架中向序列化程序对象添加和保存其他参数?
这些是我的PostSerializer中的字段我们如何在django rest框架中向序列化程序对象添加和保存其他参数?,django,django-rest-framework,django-views,django-authentication,django-serializer,Django,Django Rest Framework,Django Views,Django Authentication,Django Serializer,这些是我的PostSerializer中的字段 fields = ('id','user_id','title','desc','comments') 生成用户id和注释,并从api调用中获取标题,描述。我想将其作为附加值传递给我的请求.data。这是我的APIView对象 class PostView(APIView): permission_classes = (IsAuthenticated,) def post(self,request): reque
fields = ('id','user_id','title','desc','comments')
生成用户id
和注释
,并从api调用中获取标题
,描述
。我想将其作为附加值传递给我的请求.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)
当我的打印(request.data)
显示用户id
,注释
字段及其相应值时。在保存的数据库中,user\u id
和comments
的值为null
如何在django rest framework中向序列化程序对象添加和保存其他参数?方法1
您可以将其他字段传递给
序列化程序.save()
,如下所示:
类后视图(APIView):
权限\类=(已验证,)
def post(自我,请求):
post_serializer=PostSerializer(data=request.data)
如果post_序列化程序.是否有效():
post_serializer.save(
user\u id=request.user\u id,
comments=“机器生成”
)
返回响应(post_serializer.data)
但是通过此方法,您应该为用户id
设置blank=True
,注释以使序列化程序有效。
方法2
我不确定此方法是否正确,但我建议您不要更改request.data
。
首先复制它,然后对新字典进行更改。详情如下:
类后视图(APIView):
权限\类=(已验证,)
def post(自我,请求):
data=dict(request.data)
数据['user_id']=request.user.id
数据['comments']=“已生成机器”
post_serializer=PostSerializer(数据=数据)
如果post_序列化程序.是否有效():
post_序列化程序.save()
返回响应(post_serializer.data)
方法3
您可以使用.update()
方法更改请求.data
,而不会丢失客户端的数据:
类后视图(APIView):
权限\类=(已验证,)
def post(自我,请求):
request.data.updatea({
“用户id”:request.user.id,
“注释”:“已生成计算机”
} )
post_serializer=PostSerializer(data=request.data)
如果post_序列化程序.是否有效():
post_序列化程序.save()
打印(请求数据)
返回响应(post_serializer.data)
也共享您的PostSerialier和模型代码,谢谢。谢谢,方法1可以工作,但方法2和方法3不能。你能告诉我我的方法失败的原因吗?我不确定。如果我有你的PostSerializer和Post模型,也许我可以帮你。