python - Django Rest Framework:我应该使用 URL Slugs 还是查询参数来列出特定类别的项目?
问题描述
现在我有一个视图集,它允许我:
- 列出所有产品:www.example.com/api/products
- 在以下位置检索一种产品的详细信息:www.example.com/api/products/5
问题在于,在移动应用程序中,只有当您位于类别和子类别中时,产品才会可见。
产品模型如下所示:
class Product(models.Model):
name = models.CharField(max_length=255)
description = models.TextField()
image = models.CharField(max_length=255)
category = models.ForeignKey(ProductCategory, related_name='products', on_delete=models.CASCADE)
subcategory = models.ForeignKey(ProductSubcategory, related_name='products', on_delete=models.CASCADE)
产品 Viewset 如下所示:
class RoutineViewSet(mixins.ListModelMixin,
mixins.RetrieveModelMixin,
viewsets.GenericViewSet):
queryset = models.Product.objects.all()
def get_serializer_class(self):
if self.action == 'list':
return serializers.ProductListSerializer
else:
return serializers.ProductDetailSerializer
我应该在端点中使用 slug 或 ID 来获取项目吗?
www.example.com/api/products/category/food/subcategory/snacks
www.example.com/api/products/category/2/subcategory/3
或者我应该使用查询参数?
www.example.com/api/products/?category=2,subcategory=3
我的直觉告诉我,最简单的方法是使用查询参数并覆盖“get_queryset”方法,以根据查询参数获取不同的产品。但我不确定这是否是做这样的事情的标准方式。
谢谢
解决方案
您应该使用 detail=True 在您的视图中定义子类别 @action
推荐阅读
- java - 功能 andoid 模块 - 不允许使用应用插件:'com.android.feature'
- python - 尝试在 Mac (OS Catalina) 上安装 ssh2-python 时遇到问题
- c# - 更高精度的浮点计算
- android - 在 RxJava 中创建同步间隔
- latex - 如何在 $a,b,c,d \in \mathbb{Z}$ 下方写 $ad-bc=1$?
- scikit-learn - 在 sklearn 源代码中输入 cython 的 SIZE_t
- xml - 使用 Dart 解码 Windows 1255
- javascript - 在 HeaderMenu 中调用 ContractManager 的函数时出错
- scheme - 在球拍中创建评估函数
- php - 如果用户已登录,隐藏注册/登录页面?代码点火器