From 1532040c2c8d6c8f62be5cb7f92ebc3829fb64aa Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 24 Feb 2021 13:59:42 +0000 Subject: [PATCH] still trying to order products --- products/tests.py | 10 +++++----- products/views.py | 4 ++-- utils/tag_filters.py | 13 ++++++++++++- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/products/tests.py b/products/tests.py index b3a33ce..8783e44 100644 --- a/products/tests.py +++ b/products/tests.py @@ -209,11 +209,11 @@ class ProductViewSetTest(APITestCase): # Assert access is granted self.assertEqual(response.status_code, status.HTTP_200_OK) - # TODO: assert correct order - previous_date = datetime.datetime.now() - for instance in payload: - self.assertTrue(datetime.datetime.fromisoformat(instance['created'][:-1]) < previous_date) - previous_date = datetime.datetime.fromisoformat(instance['created'][:-1]) + # assert correct order + dates = [d['created'][:-1] for d in payload] + for i in range(len(dates)-1): + # first instance should be most recent + self.assertTrue(datetime.datetime.fromisoformat(dates[i]) > datetime.datetime.fromisoformat(dates[i+1])) # authenticated user def test_auth_user_can_list_instances(self): diff --git a/products/views.py b/products/views.py index 69d7069..557340e 100644 --- a/products/views.py +++ b/products/views.py @@ -27,7 +27,7 @@ from history.models import HistorySync from back_latienda.permissions import IsCreator from .utils import extract_search_filters, find_related_products_v3, find_related_products_v6 from utils.tag_serializers import TaggitSerializer -from utils.tag_filters import ProductTagFilter +from utils.tag_filters import ProductTagFilter, ProductOrderFilter logging.basicConfig( @@ -42,7 +42,7 @@ class ProductViewSet(viewsets.ModelViewSet): queryset = Product.objects.all() serializer_class = ProductSerializer permission_classes = [IsAuthenticatedOrReadOnly, IsCreator] - # filter_backends = [ProductTagFilter, OrderingFilter] + # filter_backends = [ProductTagFilter, ProductOrderFilter] # ordering_fields = ['created'] filterset_class = ProductTagFilter filterset_fields = ['name', 'tags', 'category', 'attributes', 'company', 'created'] diff --git a/utils/tag_filters.py b/utils/tag_filters.py index e80d9a6..eec4d5a 100644 --- a/utils/tag_filters.py +++ b/utils/tag_filters.py @@ -1,5 +1,7 @@ import django_filters +from rest_framework.filters import BaseFilterBackend + from companies.models import Company from products.models import Product @@ -26,10 +28,19 @@ class ProductTagFilter(django_filters.FilterSet): class Meta: model = Product - fields = ['name', 'tags', 'category', 'attributes', 'company', 'created'] + fields = ['name', 'tags', 'category', 'attributes', 'company', 'created',] def tag_filter(self, queryset, name, value): return queryset.filter(**{ name: value, }) + +class ProductOrderFilter(BaseFilterBackend): + def filter_queryset(self, request, queryset, view): + order_field = request.GET.get('order', None) + if order_field is not None: + return queryset.order_by(order_field) + else: + return queryset +