# Not able to filter all collections at once (advanced API)

**URL:** https://forum.codewithmosh.com/t/not-able-to-filter-all-collections-at-once-advanced-api/21355
**Category:** Django
**Created:** [July 9, 2023, 9:40am UTC](https://forum.codewithmosh.com/t/not-able-to-filter-all-collections-at-once-advanced-api/21355 "2023-07-09T09:40:29Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![emmav](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.codewithmosh.com/emmav/32/6103_2.png) [@emmav](https://forum.codewithmosh.com/u/emmav)
#### Post date: [July 9, 2023, 9:40am UTC](https://forum.codewithmosh.com/t/not-able-to-filter-all-collections-at-once-advanced-api/21355/1 "2023-07-09T09:40:29Z")

</div>

I am able to sort collections separately, but not all together. My error:

 ![sorting](https://us1.discourse-cdn.com/flex020/uploads/codewithmosh/original/2X/6/65881cfec9b100660b4f0899d4c4ff90d91516c7.png)

Looks like something is not defined, tried reuploading and migrating database as suggested by stackflow, no difference.

**my views.py**

> class ProductViewSet(ModelViewSet):  
> queryset = Product.objects.all()  
> serializer\_class = ProductSerializer  
> filter\_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]  
> filterset\_class = ProductFilter  
> pagination\_class = DefaultPagination  
> search\_fields = [‘title’, ‘description’]  
> ordering\_fields = [‘unit\_price’, ‘last\_update’]

```
def get_queryset(self):
    queryset = Product.objects.all()
    collection_id = self.request.query_params.get('collection_id')
    if collection_id is not None:
        queryset = queryset.filter(collection_id=collection_id)

    return queryset

def get_serializer_context(self):
    return {'request': self.request}

def destroy(self, request, *args, **kwargs):
    if OrderItem.objects.filter(product_id=kwargs['pk']).count() > 0:
        return Response({'error': 'Product cannot be deleted because it is associated with an order item.'}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
    
    return super().destroy(request, *args, **kwargs)

```

class CollectionViewSet(ModelViewSet):  
queryset = Collection.objects.annotate(  
products\_count=Count(‘products’)).all()  
serializer\_class = CollectionSerializer

```
def destroy(self, request, *args, **kwargs):
    if Collection.objects.filter(id=kwargs['pk']).count() > 0:
        return Response({'error': 'Collection cannot be deleted because it includes one or more products.'}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
    
    return super().destroy(request, *args, **kwargs)

```

class ReviewViewSet(ModelViewSet):  
serializer\_class = ReviewSerializer

```
def get_queryset(self):
    return Review.objects.filter(product_id=self.kwargs['product_pk'])

def get_serializer_context(self):
    return {'product_id': self.kwargs['product_pk']}

```

**urls.py**

> router = routers.DefaultRouter()
> 
> router.register(‘products’, views.ProductViewSet, basename=‘products’)
> 
> router.register(‘collections’, views.CollectionViewSet)
> 
> products\_router = routers.NestedDefaultRouter(router, ‘products’, lookup=‘product’)
> 
> products\_router.register(‘reviews’, views.ReviewViewSet, basename=‘product-reviews’)
> 
> urlpatterns = router.urls + products\_router.urls
