【问题标题】:Django Rest framework with Custom query带有自定义查询的 Django Rest 框架
【发布时间】:2018-08-08 03:28:10
【问题描述】:

[已解决]

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

哪里出错了?

【问题讨论】:

  • 在班级级别定义queryset = article.objects.all()
  • 为此显示您的 urls.py 行
  • 你为什么要在这里定义list?您的版本没有做任何特别的事情,使用通用视图或视图集的全部意义在于它为您完成了所有这些。
  • @AvinashRaj 谢谢。切换到班级级别,错误被隐藏。但是当我访问 /article/ 时,它会出现“serializer = articleSerializer(queryset, many=True) NameError: name 'queryset' is not defined”
  • 正如丹尼尔所说,定义 serializer_class ,类级别的查询集就足够了

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    [已解决]

    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)
    

    【讨论】:

      猜你喜欢
      • 2016-01-10
      • 2015-06-05
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多