我们如何在 django rest 框架中向序列化程序对象添加和保存其他参数?
How do we add and save additional parameters to a serializer object in django rest framework?
这些是我的 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 框架中向序列化程序对象添加和保存附加参数?
方法一
您可以将其他字段传递给 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)
但是通过这个方法,你应该让<em>blank=True</em>
for <em>user_id</em>
、<em>评论</em>
以使序列化程序有效。
方法二
我不确定此方法是否正确,但我建议您不要更改 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)
方法三
您可以使用 .update()
方法更改 request.data
而不会从客户端丢失数据:
class PostView(APIView):
permission_classes = (IsAuthenticated,)
def post(self,request):
request.data.updata ( {
'user_id': request.user.id,
'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)
这些是我的 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 框架中向序列化程序对象添加和保存附加参数?
方法一
您可以将其他字段传递给 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)
但是通过这个方法,你应该让<em>blank=True</em>
for <em>user_id</em>
、<em>评论</em>
以使序列化程序有效。
方法二
我不确定此方法是否正确,但我建议您不要更改 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)
方法三
您可以使用 .update()
方法更改 request.data
而不会从客户端丢失数据:
class PostView(APIView):
permission_classes = (IsAuthenticated,)
def post(self,request):
request.data.updata ( {
'user_id': request.user.id,
'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)