根据django休息框架工作3.7 (viewsets.ViewSet)
将为一组标准的创建/检索/更新/破坏风格动作提供路径
和
(viewsets.ModelViewSet)
还将为一组标准的创建/检索/更新/销毁样式操作提供路由
所以什么时候使用这两个类,这两个有什么区别。和get_objects()方法可以覆盖(viewsets.ViewSet)
类吗?或者get_objects()方法仅限于(viewsets.ModelViewSet)
类?谢谢
答案 0 :(得分:3)
也许其他人会给出一个更完整的答案,但这里的快速和肮脏。 ModelViewset是一个Viewset,可以非常轻松地为数据模型上的CRUD操作进行配置。如果您希望为models.py中定义的对象公开REST API,那么公开它的最快方法是使用ModelViewSet。视图集在应用程序方面更加开放。您可以使用Viewset构建模型CRUD端点,但您也可以构建一个根本不与模型绑定的端点。 ViewSet具有很大的灵活性,但ModelViewset更受限制,但需要较少的配置来完成大多数基于模型的任务。
答案 1 :(得分:0)
我同意以上回答,只是想在此添加更多点。 ModelViewset与标准Viewset类似,但是它是用来管理模型并具有一些内置功能的,我们也可以根据需要覆盖默认的对象管理器功能,例如create,update等,因此可以使用ModelViewset来管理数据库对象用于模型。
答案 2 :(得分:0)
我需要添加更多详细信息。我正在使用文档代码进一步解释
viewsets.ViewSet
class ViewSet(ViewSetMixin, views.APIView):
"""
The base ViewSet class does not provide any actions by default.
"""
pass
这意味着ViewSet
继承了两个类ViewSetMixin
(它仅将'GET'和'POST'方法绑定到'list'和'create'操作)和views.APIView
(这提供了authentication_classes,permission_classes等属性)。因此viewsets.ViewSet
默认情况下不提供任何具体的动作方法,但是您必须手动覆盖列表,创建,更新等方法。
class ModelViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
GenericViewSet):
"""
A viewset that provides default create(),retrieve(),update(),
partial_update(), destroy() and list() actions.
"""
pass
这意味着 ModelViewSet 继承了所有大多数混合,因此它提供了默认列表,创建,更新等。操作方法和 GenericViewSet (提供get_object
和get_queryset
方法,您将需要设置这些属性,或覆盖get_queryset()
/ get_serializer_class()
,因为GenericViewSet
来自GenericAPIView,因此modelViewSet需要在ModelViewSet中设置的queryset
和serializer_class
属性。
3. get_objects()方法是否可以在(viewsets.ViewSet)类中覆盖?或get_objects()方法仅限于(viewsets.ModelViewSet)类?。
**get_object** and **get_queryset** belongs to **GenericViewSet(GenericAPIView)** class, in ModelViewSet this GenericViewSet inherited by default so it works only in **ModelViewSet** and **get_object** method no use in ViewSet.
有关更多信息,请检查此article,下次您不问任何问题