diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/lofar_viewset.py b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/lofar_viewset.py index f3b050eed854513dc70ce8b9cc8b9b27ba573b4f..c1eac7f24aae570b97f6b537ec00828164be37e8 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/lofar_viewset.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/lofar_viewset.py @@ -53,6 +53,7 @@ class LOFARViewSet(viewsets.ModelViewSet): metadata_class = LOFARDefaultMetadata filter_backends = (LOFARFilterBackend, OrderingFilter, IsProjectMemberFilterBackend,) filter_fields = '__all__' + ordering_fields = '__all__' @swagger_auto_schema(responses={403: 'forbidden'}) def list(self, request, **kwargs): diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/metadata.py b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/metadata.py index 9f2defcb99d4d9948eb15afa9a9f7f1a422bd3c9..d781ab26ab01b5452b4bde02ddc9f5f891429b61 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/metadata.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/metadata.py @@ -13,13 +13,16 @@ class LOFARDefaultMetadata(SimpleMetadata): def determine_metadata(self, request, view): metadata = super(LOFARDefaultMetadata, self).determine_metadata(request, view) - # TODO: For some models, it happens that both filter_fields and filter_class are present. We need to handle duplicates. metadata['filters'] = OrderedDict() if hasattr(view, 'filter_fields'): if view.filter_fields == '__all__': - # TODO: Add fields in a proper way. - metadata['filters'] = {**metadata['filters'], **{'__all__': str(view.get_serializer().Meta.model._meta.fields)}} + # Iterate over all fields + fields = view.get_serializer().Meta.model._meta.fields + filters = OrderedDict() + for f in fields: + filters[f.name] = {"type": str(f.__class__.__name__), "lookup_types": ["exact"]} + metadata['filters'] = {**metadata['filters'], **filters} else: # TODO: Handle field per field. pass @@ -66,10 +69,13 @@ class LOFARDefaultMetadata(SimpleMetadata): # Add ordering info # NOTE: If you don't specify an ordering attribute on the view, the filter class will default to allowing # the user to filter on any readable fields on the serializer specified by the serializer_class attribute. - if hasattr(view, 'ordering'): - metadata['ordering'] = view.ordering - else: - # TODO: - metadata['ordering'] = str(view.get_serializer().Meta.model._meta.fields) + if hasattr(view, 'ordering_fields'): + if view.ordering_fields == '__all__': + # Iterate over all fields + fields = view.get_serializer().Meta.model._meta.fields + metadata['ordering'] = [f.name for f in fields] + else: + # TODO: Handle field per field. + pass return metadata