在django中使用Viewset.Viewset和Viewset.ModelViewSet时的混淆

在django中使用Viewset.Viewset和Viewset.ModelViewSet时的混淆,django,django-rest-framework,Django,Django Rest Framework,根据django rest frame work 3.7(ViewSet.ViewSet)将为一组标准的创建/检索/更新/销毁样式动作提供路由 及 (viewsets.ModelViewSet)还将为一组标准的创建/检索/更新/销毁样式操作提供路由 那么什么时候使用这两个类,这两个类之间有什么区别呢。和get_objects()方法我们可以在(ViewSet.ViewSet)类中重写吗?或者get_objects()方法仅限于(viewsets.ModelViewSet)class?。谢谢也许其

根据django rest frame work 3.7
(ViewSet.ViewSet)
将为一组标准的创建/检索/更新/销毁样式动作提供路由

(viewsets.ModelViewSet)
还将为一组标准的创建/检索/更新/销毁样式操作提供路由


那么什么时候使用这两个类,这两个类之间有什么区别呢。和get_objects()方法我们可以在
(ViewSet.ViewSet)
类中重写吗?或者get_objects()方法仅限于
(viewsets.ModelViewSet)
class?。谢谢也许其他人会给出更完整的答案,但这里有一个快速而肮脏的答案。ModelViewset是一种非常容易为数据模型上的CRUD操作配置的视图集。如果要为models.py中定义的对象公开REST API,最快的公开方法是使用ModelViewSet。就应用程序而言,视图集的开放性要大得多。可以使用视图集构建模型CRUD端点,但也可以构建一个根本不与模型关联的端点。视图集具有很大的灵活性,但ModelViewset的约束更为严格,但完成大多数基于模型的任务所需的配置更少。

我同意上述答案,只想为其添加更多要点。
ModelViewset与标准Viewset类似,但它是用来管理模型的,并且有几个内置功能。此外,我们还可以根据需要覆盖默认的对象管理器功能,如创建、更新等。因此,ModelViewset是用来管理模型的数据库对象的。

我需要添加更多详细信息。我正在使用文档代码进一步解释

  • ViewSet.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
    (这提供了身份验证类、权限类等属性)。因此,默认情况下,
    ViewSet.ViewSet
    不提供任何具体操作方法,但您必须手动覆盖列表、创建、更新等。。。方法

  • viewset.ModelViewSet
  • 这意味着ModelViewSet继承了all-most-all-mixin,因此它提供了默认列表、创建、更新等功能。。操作方法和GenericViewSet(它提供了
    get\u对象
    get\u查询集
    方法,您需要设置这些属性,或者重写
    get\u查询集()
    /
    get\u序列化器类()
    因为
    GenericViewSet
    是从GenericAPIView中继承的,所以modelViewSet需要在modelViewSet中设置
    queryset
    serializer\u class
    属性

    3.get_objects()方法我们可以在(ViewSet.ViewSet)类中重写吗?或者get_objects()方法只能在(ViewSet.ModelViewSet)类中重写吗

    欲了解更多信息,请检查此项,下次您将不会提出问题

    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
    
    
    **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.