在django中使用Viewset.Viewset和Viewset.ModelViewSet时的混淆
根据django rest frame work 3.7在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?。谢谢也许其
(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是用来管理模型的数据库对象的。我需要添加更多详细信息。我正在使用文档代码进一步解释
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
不提供任何具体操作方法,但您必须手动覆盖列表、创建、更新等。。。方法
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.