报错内容:
'basename' argument not specified, and could not automatically determine the name from the viewset, as it does not have a '.queryset' attribute.
basename是Router.register()中的一个属性。
如果没有设置basename
将会自动的基于viewset中的queryset
属性。如果不使用queryset
属性,自定义get_quertset
方法,那么需要设置basename参数。
示例代码如下. 这里使用了自定义的get_quertset
方法,所以router.register()中必须加上basename
,不然会出现以上错误 view.py
class GoodsListViewSet(ModelViewSet):
# queryset = Goods.objects.all()
serializer_class = GoodsSerializer
pagination_class = MyPagination
def get_queryset(self):
queryset = Goods.objects.all()
price_min = self.request.query_params.get("price_min", 0)
if price_min:
queryset = queryset.filter(shop_price__gt=int(price_min))
return queryset
url.py
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'goods', GoodsListViewSet, base_name="goods")