Skip to content
Snippets Groups Projects
Commit 745245d2 authored by Mario Raciti's avatar Mario Raciti
Browse files

TMSS-736: Add ordering_fields to LOFARViewSet; add __all__ filtering and ordering info

parent ddd0c142
No related branches found
No related tags found
1 merge request!438Resolve TMSS-736
......@@ -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):
......
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment