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



5a69a2f30001f61205000200.jpg

5a69a2f40001aac505000377.jpg


写回答

10回答

bobby

2018-01-29

你加我的qq 442421039

0
1
chenyuanshen
这个问题有好的解决吗?
2021-03-10
共1条回复

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)


1
0

chenyuanshen

2021-03-10

这个问题有好的解决吗?

0
0

慕猪666666

2019-02-08

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

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

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

0
3
bobby
回复
慕猪666666
好的,
2019-02-17
共3条回复

拓跋宇

2019-01-29

这个问题还是没有解决吧

//img.mukewang.com/szimg/5c504d9800015ebf11990539.jpg

//img.mukewang.com/szimg/5c504db90001faf614000795.jpg

我确定数据库有这条数据

//img.mukewang.com/szimg/5c504df000010bee15880851.jpg

0
0

2015061501

2019-01-26

老师 解决了吗

0
2
bobby
加我qq 442421039 我看看
2019-02-01
共2条回复

慕尼黑6048792

2018-10-12

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

0
1
bobby
你有没有确定过你的数据库中这条数据确实是存在的?
2018-10-12
共1条回复

修仙__金丹

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"),
    ...
    ]

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

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

0
0

mynSoo

2018-03-01

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

0
0

慕函数7008689

2018-02-16

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

0
1
mynSoo
我是重写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
共1条回复

Python前后端分离开发Vue+Django REST framework实战

Django REST framework课程视频,RESTFul API前后端分离开发

2873 学习 · 2457 问题

查看课程