没有获得在Django REST框架中发布数据的表单

时间:2015-08-10 08:30:49

标签: python django django-rest-framework django-serializer

我在Django rest框架中使用基于函数的视图。但是当我在浏览中打开网页时,我没有获得发布数据的表单。当我向下滚动获取媒体类型和内容选项而不是我的模型字段时。在我的模型中,我有user_name,user_email字段但没有在那里显示。我需要使用基于类的视图吗?以下是截图。

@api_view(['GET','POST'])
def user_list(request):
    if request.method == 'GET':
        data = User_Data.objects.all()
        serializer = User_Data_Serializers(data)
        return Response(serializer.data)
    if request.method == 'POST':
        data = request.data
        serializer = User_Data_Serializers(data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status = status.HTTP_201_CREATED)

        return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST)

screenshot

1 个答案:

答案 0 :(得分:5)

使用DRF功能视图时无法进行此操作。您需要切换到基于类的视图或DRF的视图集。原因是,为了呈现表单,DRF渲染器需要知道哪个序列化程序正用于视图,从中可以提取所有各种字段。在CBV中,它通过使用属性定义:

class MyViewSet(ViewSet):
   serializer_class = MySerializer

由于在功能视图中没有相同的功能,我认为不可能达到你的要求。

您想要实现的目标在DRF视图集中实际上非常简单:

# viewsets.py
class UserViewSet(ListCreateAPIView):
    queryset = User_Data.objects.all()
    serializer_class = User_Data_Serializers

# urls.py
router = DefaultRouter()
router.register(r'users', UserViewSet, 'users')
urlpatterns = router.urls

以上3行视图集实现与功能视图相同的效果。我觉得很酷!