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

时间:2018-02-28 09:43:28

标签: django django-rest-framework django-views

[解决]

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.py]

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

错误发生在哪里?

2 个答案:

答案 0 :(得分:0)

views.py

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

urls.py:

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

答案 1 :(得分: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)