带有自定义查询的Django Rest框架

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有自定义查询的Django Rest框架相关的知识,希望对你有一定的参考价值。

[解决了]

class articleViewSet(viewsets.ModelViewSet):
    queryset = article.objects.all()
    serializer_class = articleSerializer

    def list(self, request):
        queryset = self.get_queryset()
        serializer = articleSerializer(queryset, many=True)
        return Response(serializer.data)

我使用DRF制作了API服务器。

为了自定义列表请求,我写了这样的views.py。

[views.朋友]

class articleViewSet(viewsets.ModelViewSet):
    def list(self, request):
        queryset = article.objects.all()
        serializer = articleSerializer(queryset, many=True)
        return Response(serializer.data)

但是,当我执行runserver时,它会抛出错误。

AssertionError:未指定base_name参数,并且无法自动确定视图集中的名称,因为它没有.queryset属性。

错误发生在哪里?

答案

views.朋友

class articleViewSet(viewsets.ModelViewSet):
    queryset = article.objects.all()
    serializer_class = articleSerializer

URLs.朋友:

router = Router()

router.register(r'article', views.articleViewSet)

urlpatterns = [
    path('', include(router.urls)), # for django2.0.x
    url(r'^', include(router.urls)) # for django1.x
    path('admin/', admin.site.urls),
]

这就是全部,如果你想获得列表中的所有文章,你不需要覆盖列表方法,ModelViewSet将自动为你完成它。

另一答案

您的视图类必须包含两个类对象,即querysetserializer_class。所以你的观点是这样的

class articleViewSet(viewsets.ModelViewSet):
    queryset = article.objects.all()
    serializer_class = articleSerializer

    # def list(self, request):
    #     queryset = article.objects.all()
    #     serializer = articleSerializer(queryset, many=True)
    #     return Response(serializer.data)

我评论了list()方法,因为ModelViewset默认会做那些东西。如果你需要在override方法中执行更多操作,你可以list()

另一答案

[解决了]

class articleViewSet(viewsets.ModelViewSet):
    queryset = article.objects.all()
    serializer_class = articleSerializer

    def list(self, request):
        queryset = self.get_queryset()
        serializer = articleSerializer(queryset, many=True)
        return Response(serializer.data)

以上是关于带有自定义查询的Django Rest框架的主要内容,如果未能解决你的问题,请参考以下文章

在带有 django-rest-framework 的过滤器中使用自定义方法

带有视图集路由器查询集过滤器的 Django REST 框架

从 django rest 框架中的序列化程序发送自定义错误响应?

Django Rest 框架和 JSONField

Django REST框架--认证和权限

Django Rest 框架 - APIView 分页