GoodsListViewSet删除queryset属性导致错误
来源:5-11 drf的过滤
慕数据957128
2018-01-23
在《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新增了这个断言?
3回答
-
痕六
2018-01-31
如果不用queryset属性,需要在router里面添加一个base_name参数
router.register('goods', GoodsListViewSet, base_name='goods_list')
这个类似我们常规定义url的时候里面的name参数
path('goods/', goods_list, name='goods_list') # 这个name, 用于反向解析之类的
因为viewset会根据queryset属性里面的查询集默认生产一个goods-list或者goods-detail的base_name
312020-04-20 -
bobby
2018-01-25
你可以试试楼下同学的方法
022018-01-29 -
慕粉0243397241
2018-01-23
同样遇到这个问题,把删除的代码
queryset = Goods.objects.all()
补上就没问题了。同样怀疑版本更新的问题
00
Python前后端分离开发Vue+Django REST framework实战
2873 学习 · 2457 问题
相似问题