django - Django Rest Framework:使用根 API 获取奇异对象
问题描述
我正在尝试设置一个返回单个对象的 API 端点。
现在我有:
class ShoppingCartViewSet(viewsets.GenericViewSet, mixins.ListModelMixin):
"""
API endpoint that allows users to be viewed or edited.
"""
serializer_class = ShoppingCartSerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
def get_paginated_response(self, data):
return Response(data)
def get_queryset(self):
return ShoppingCart.objects.filter(user=self.request.user)
它使用ListModelMixin
和 过滤器返回一件商品,因为每个用户都有 1 个购物车。
问题是该filter
函数返回一个查询集,但我只想要一个项目。
我试图使用,RetrieveModelMixin
但它没有在我想要的端点上运行。检索运行,.../api/shopping-cart/id
但我想检索,.../api/shopping-cart
因为过滤是通过登录的人完成的。
有什么解决办法吗?
解决方案
我最终解决它的方式仍然是使用 ListModelMixin,因为我需要从视图集中受益。
我用以下方法覆盖了该list()
方法:
class ShoppingCartViewSet(viewsets.GenericViewSet, mixins.ListModelMixin):
"""
API endpoint that allows users to be viewed or edited.
"""
serializer_class = ShoppingCartSerializer
# authentication_classes = (TokenAuthentication,)
# permission_classes = (IsAuthenticated,)
def get_paginated_response(self, data):
return Response(data)
def list(self, request, *args, **kwargs):
instance = ShoppingCart.objects.get(user=self.request.user)
serializer = self.get_serializer(instance)
return Response(serializer.data)
它在根 url .../api/shopping-cart 上返回一个单数项,而无需传递参数,因为它基于用户进行过滤。
推荐阅读
- google-sheets - GoogleSheet 查询:非数字数据的 Gruop By 和 Avg
- scala - 有没有办法使用名称不同于 part* 的 scala 在 spark 3.0.1 中导出 csv 或其他文件?
- kotlin - 在 Kotlin 中,我如何创建一个计算 TAX 或 VAT 的函数?
- spring-boot - 如何启动 2.4.0 和 kotlin 1.4.20
- javascript - TypeError:instance.render 不是在 React 中创建动态输入的函数
- python - 对 txt 行进行数字排序
- python - 谷歌 RL 足球模拟器的录制屏幕
- javascript - 网站在更改其显示属性时更改 div 的字体大小(仅在移动设备上)
- python - 当我已经指定错误消息时,如何使用python删除在计算器中完成的计算
- javascript - 使用一个图像作为另一个图像的掩码