4

我在 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)

截屏

4

1 回答 1

6

这在使用 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 行视图集实现了与您的功能视图相同的效果。我觉得很酷!

于 2015-08-10T13:39:51.163 回答