Прямо сейчас у меня есть вид, который позволяет мне:
- Список всех продуктов на: 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
Должен ли я использовать слаг или идентификатор в конечной точке для получения элементов?
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 для получения различных продуктов в зависимости от параметров запроса. Но я не уверен, что это стандартный способ сделать что-то вроде этого.
Спасибо