django viewset 和 Router 配合使用时报的错
报错内容:
'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
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
url.py
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'goods', GoodsListViewSet, base_name="goods")
1
2
3
2
3
上次更新: 2023/05/01, 18:02:43