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

问题描述 投票:0回答:3

[解决了]

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属性。

错误发生在哪里?

django django-rest-framework django-views
3个回答
0
投票

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将自动为你完成它。


0
投票

您的视图类必须包含两个类对象,即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()


0
投票

[解决了]

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)
© www.soinside.com 2019 - 2024. All rights reserved.