drf定义get_queryset报错-- 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.
-
视图
class GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): # 指定queryset # queryset = Goods.objects.all() # 指定序列化类 serializer_class = GoodsSerializer # 指定分页类 pagination_class = GoodsPagination def get_queryset(self): return Goods.objects.filter(shop_price__gt=100)
-
url
import xadmin from django.conf.urls import url, include # from django.contrib import admin # serve 视图处理静态文件 from django.views.static import serve # 自动生成接口文档 from rest_framework.documentation import include_docs_urls from rest_framework.routers import DefaultRouter from MxShop.settings import MEDIA_ROOT from goods.views import GoodsListViewSet # 生成一个注册器实例对象 router = DefaultRouter() # 将需要自动生成url的接口注册 # 配置goods的url router.register(r'goods', GoodsListViewSet) urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r'^xadmin/', xadmin.site.urls), url(r'^api-auth/', include('rest_framework.urls', namespace="rest_framework")), # 路径是media/开始都调用serve这个视图, 这个视图去MEDIA_ROOT下去找 url(r'^media/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT}), # 商品列表 # url(r"^goods/$", GoodsListView.as_view(), name="goods_list"), # url(r"^goods/$", GoodsListViewSet.as_view({ # "get": "list" # })), # 自动生成url url(r"^", include(router.urls)), # 正则表达式一定不要加$, title可以任意命名 url(r"^docs/", include_docs_urls(title="慕学生鲜")), ]
-
报错图
-
解决方案, 在router.register(r’goods’, GoodsListViewSet)制定个base_name
import xadmin from django.conf.urls import url, include # from django.contrib import admin # serve 视图处理静态文件 from django.views.static import serve # 自动生成接口文档 from rest_framework.documentation import include_docs_urls from rest_framework.routers import DefaultRouter from MxShop.settings import MEDIA_ROOT from goods.views import GoodsListViewSet # 生成一个注册器实例对象 router = DefaultRouter() # 将需要自动生成url的接口注册 # 配置goods的url router.register(r'goods', GoodsListViewSet, base_name="goods-list") urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r'^xadmin/', xadmin.site.urls), url(r'^api-auth/', include('rest_framework.urls', namespace="rest_framework")), # 路径是media/开始都调用serve这个视图, 这个视图去MEDIA_ROOT下去找 url(r'^media/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT}), # 商品列表 # url(r"^goods/$", GoodsListView.as_view(), name="goods_list"), # url(r"^goods/$", GoodsListViewSet.as_view({ # "get": "list" # })), # 自动生成url url(r"^", include(router.urls)), # 正则表达式一定不要加$, title可以任意命名 url(r"^docs/", include_docs_urls(title="慕学生鲜")), ]
-
就不会报错了