带有自定义查询的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
将自动为你完成它。
另一答案
您的视图类必须包含两个类对象,即queryset
和serializer_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 框架