在《drf的过滤》这一课一开始,老师介绍道def get_queryset(self):函数可以替代queryset属性,因为函数本身会返回一个queryset。随后在老师演示的试验里,引入get_queryset函数,删除queryset属性后,可以正常运行。
可是当我做同样试验时,代码如下:
class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet): """ 商品列表页 """ #queryset = Goods.objects.all() serializer_class = GoodsSerializer def get_queryset(self): return Goods.objects.filter(shop_price__gt=100)
运行提示如下错误:
File "/home/manager/.virtualenvs/py36env/lib/python3.6/site-packages/rest_framework/routers.py", line 148, in get_default_base_name
assert queryset is not None, '`base_name` argument not specified, and could ' \
AssertionError: `base_name` argument not specified, and could not automatically determine the name from the viewset, as it does not have a `.queryset` attribute.
说在断言queryset不是None时失败,那么必须显性定义queryset属性了?是不是rest_framework代码升级了,比Bobby老师用的那个版本的rest_framework新增了这个断言?
Django REST framework课程视频,RESTFul API前后端分离开发
了解课程