DRF,返回客户端发送的内容以及serializer.data

时间:2015-11-11 03:06:52

标签: django django-rest-framework

我在客户端保存临时数据,并获得客户端ID。 (App存储用户在客户端发布数据,直到提交完成)

我想在创建/更新时将此客户端ID与其他数据一起发送到服务器。

如果服务器在使用serializer.data响应时可以附加此客户端ID,则客户端可以删除客户端保存的临时数据。

似乎我必须覆盖viewsets的create/update,我想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:0)

您的一个选择是这样的:

views.py:

class PostDataWithClienID(APIView):
    def post(self, request, client_id):

    # Context needed if you need client_id while saving posted data
    serializer = PostedDataSerializer(data=request.data,
                                      context={'client_id': client_id})

    if serializer.is_valid():
            serializer.save()
            return Response({'data': serializer.data, 
                             'client_id': client_id}, 
                            status=status.HTTP_200_OK)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

urls.py:

urlpatterns = [
    ...

    url(r'^/(?P<client_id>[0-9]+)/post_data_with_client_id$', views.PostDataWithClienID.as_view()),
    ...

如果你想让它在响应中合并,你可以这样做:

class PostDataWithClienID(APIView):
    def post(self, request, client_id):

    # Context needed if you need client_id while saving posted data
    serializer = PostedDataSerializer(data=request.data,
                                      context={'client_id': client_id})

    if serializer.is_valid():
            serializer.save()
            my_response_dict = serializer.data.copy()
            my_response_dict.update({'client_id': client_id})
            return Response(my_response_dict, 
                            status=status.HTTP_200_OK)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)