我在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)
答案 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行视图集实现与功能视图相同的效果。我觉得很酷!