CategoryViewSet继承RetrieveModelMixin之后只显示category=1的项,并导致与前端连接后,页面无法显示
来源:6-2 商品类别数据接口-2
慕数据957128
2018-01-25
在6.2的最后老师介绍CategoryViewSet只要继承了RetrieveModelMixin,不用动urls.py就可以单独用ID来显示每一项。
我照做了,发现只有category=1的Category可以显示,当取ID=111时,就显示不了,如下图
但是老师演示的ID=111是可以显示的,我觉得费解,按照代码,queryset要求category=1才可以显示,那么我自己的试验结果是正常的,ID=1就是第一类商品,其他几个第一类商品我试过也是可以显示,老师的任何category_type都能查询出来反而不合理?
用git拉下的完整代码启动后端,前端api里设置host为本地后端,页面无法显示,调试查看错误正是categorys/4无法显示,与这个错误原因相同。
我的解决办法是CategoryViewset里把filter替换成all()以显示所有category。
queryset = GoodsCategory.objects.all() #filter(category_type=1)
修改之后,前端页面可以正常显示。
但是老师的网站http://shop.projectsedu.com/categorys/2/这种加了ID的直接访问API也不能显示:
"detail": "未找到。"
请问是怎么回事呢?为什么前端设置host=http://shop.projectsedu.com又能找到?
请Bobby老师解答,谢谢!
10回答
-
你加我的qq 442421039
012021-03-10 -
mynSoo
2018-03-01
# 重写list方法 class CategoryViewSet(ListModelMixin,RetrieveModelMixin, GenericViewSet): ''' list: 商品分类列表数据 ''' queryset = GoodsCategory.objects.all() serializer_class = GoodsCategorySerializer def list(self, request, *args, **kwargs): queryset = self.get_queryset().filter(category_type=1) page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) return Response(serializer.data)
10 -
chenyuanshen
2021-03-10
这个问题有好的解决吗?
00 -
慕猪666666
2019-02-08
我也遇到了这个问题,最后按照这个一年前的提问,这个提问后面附那个解决方法,能够全取到。
queryset = GoodsCategory.objects.all() #filter(category_type=1)
然而按照老师的做法取不到值。
032019-02-17 -
拓跋宇
2019-01-29
这个问题还是没有解决吧
我确定数据库有这条数据
00 -
2015061501
2019-01-26
老师 解决了吗
022019-02-01 -
慕尼黑6048792
2018-10-12
请问这个问题最后如何解决的?我也遇到了同样的问题
012018-10-12 -
修仙__金丹
2018-08-22
# views.py class CategoryListViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): """ list: 商品分类列表数据 """ queryset = GoodsCategory.objects.all() # queryset = GoodsCategory.objects.all() serializer_class = CategorySerializer
还是按照原来的方法匹配后面的数字
# urls.py # 配置单条信息获取 category_one = CategoryListViewSet.as_view({ 'get': 'retrieve' }) urlpatterns = [ ... url(r"^categorys/(?P<pk>[0-9]+)/$", category_one, name="single_info"), ... ]
暂时能解决 但是应该还会有更好的方法
毕竟掐指一算应该是过滤器的问题
00 -
mynSoo
2018-03-01
同学,这个问题怎么解决的呢?
00 -
慕函数7008689
2018-02-16
同学,这个问题怎么解决的呢?
012018-03-01
Python前后端分离开发Vue+Django REST framework实战
2873 学习 · 2457 问题
相似问题