请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

CategoryViewSet继承RetrieveModelMixin之后只显示category=1的项,并导致与前端连接后,页面无法显示

在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老师解答,谢谢!



5a69a2f30001f61205000200.jpg

5a69a2f40001aac505000377.jpg


正在回答

10回答

你加我的qq 442421039

0 回复 有任何疑惑可以回复我~
  • 这个问题有好的解决吗?
    回复 有任何疑惑可以回复我~ 2021-03-10 11:32:47
mynSoo 2018-03-01 11:35:09
# 重写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)


1 回复 有任何疑惑可以回复我~
chenyuanshen 2021-03-10 11:32:42

这个问题有好的解决吗?

0 回复 有任何疑惑可以回复我~
慕猪666666 2019-02-08 15:58:50

我也遇到了这个问题,最后按照这个一年前的提问,这个提问后面附那个解决方法,能够全取到。

queryset = GoodsCategory.objects.all()     #filter(category_type=1)

然而按照老师的做法取不到值。

0 回复 有任何疑惑可以回复我~
  • bobby #1
    你加我qq 442421039
    回复 有任何疑惑可以回复我~ 2019-02-11 10:17:37
  • 慕猪666666 回复 bobby #2
    实在找不出原因,我又重头写了一边,现在可以了。实现了这段代码,精简了。之后困难的问题我还要请教您!
    回复 有任何疑惑可以回复我~ 2019-02-14 22:19:32
  • bobby 回复 慕猪666666 #3
    好的,
    回复 有任何疑惑可以回复我~ 2019-02-17 10:48:28
拓跋宇 2019-01-29 20:58:45

这个问题还是没有解决吧

https://img1.sycdn.imooc.com//szimg/5c504d9800015ebf11990539.jpg

https://img1.sycdn.imooc.com//szimg/5c504db90001faf614000795.jpg

我确定数据库有这条数据

https://img1.sycdn.imooc.com//szimg/5c504df000010bee15880851.jpg

0 回复 有任何疑惑可以回复我~
2015061501 2019-01-26 11:17:36

老师 解决了吗

0 回复 有任何疑惑可以回复我~
  • 这个问题解决了吗
    回复 有任何疑惑可以回复我~ 2019-01-30 11:54:09
  • bobby #2
    加我qq 442421039 我看看
    回复 有任何疑惑可以回复我~ 2019-02-01 15:08:56
慕尼黑6048792 2018-10-12 04:17:49

请问这个问题最后如何解决的?我也遇到了同样的问题

0 回复 有任何疑惑可以回复我~
  • bobby #1
    你有没有确定过你的数据库中这条数据确实是存在的?
    回复 有任何疑惑可以回复我~ 2018-10-12 14:37:26
修仙__金丹 2018-08-22 21:08:04
# 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"),
    ...
    ]

暂时能解决 但是应该还会有更好的方法

毕竟掐指一算应该是过滤器的问题

0 回复 有任何疑惑可以回复我~
mynSoo 2018-03-01 11:29:04

同学,这个问题怎么解决的呢?

0 回复 有任何疑惑可以回复我~
慕函数7008689 2018-02-16 20:18:25

同学,这个问题怎么解决的呢?

0 回复 有任何疑惑可以回复我~
  • mynSoo #1
    我是重写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)
    回复 有任何疑惑可以回复我~ 2018-03-01 11:34:14
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信