11import django_filters
22from django .db .models import Q
33
4- from tom_dataproducts .models import DataProduct
4+ from tom_dataproducts .models import DataProduct , ReducedDatum
55
66
7- class DataProductFilter (django_filters .FilterSet ):
7+ class DataProductFilter (django_filters .rest_framework .FilterSet ):
8+ """
9+ Filters are available for DataProduct objects:
10+ - target_name: Filter by target name or alias.
11+ - facility: Filter by the facility of the observation record associated with the data product.
12+
13+ Access these filters via the API endpoint:
14+ `GET /api/dataproducts/?target_name=<name>&facility=<facility>`
15+ """
816 target_name = django_filters .CharFilter (label = 'Target Name' , method = 'filter_name' )
917 facility = django_filters .CharFilter (field_name = 'observation_record__facility' , label = 'Observation Record Facility' )
1018
@@ -14,3 +22,31 @@ class Meta:
1422
1523 def filter_name (self , queryset , name , value ):
1624 return queryset .filter (Q (target__name__icontains = value ) | Q (target__aliases__name__icontains = value ))
25+
26+
27+ class ReducedDatumFilter (django_filters .rest_framework .FilterSet ):
28+ """
29+ Filters are available for ReducedDatum objects:
30+ - target__id: Filter by target ID.
31+ - target_name: Filter by target name or alias.
32+ - data_product_pk: Filter by the primary key of the associated DataProduct.
33+ - data_product_product_id: Filter by the "Product ID" or filename of the associated DataProduct.
34+ - source_name: Filter by the name of the source.
35+ - data_type: Filter by the type of data (e.g., 'photometry', 'spectrum').
36+
37+ Access these filters via the API endpoint:
38+ `GET /api/reduceddatums/?target__id=<id>&data_type=<type>`
39+ """
40+ target_name = django_filters .CharFilter (label = 'Target Name' , method = 'filter_name' )
41+ data_product_name = django_filters .CharFilter (method = 'filter_data_product_name' , label = 'Data Product filename' )
42+
43+ class Meta :
44+ model = ReducedDatum
45+ fields = ['target__id' , 'target_name' , 'data_product__id' , 'source_name' , 'data_type' ]
46+
47+ def filter_name (self , queryset , name , value ):
48+ return queryset .filter (Q (target__name__icontains = value ) | Q (target__aliases__name__icontains = value ))
49+
50+ def filter_data_product_name (self , queryset , name , value ):
51+ return queryset .filter (data_product__product_id__icontains = value ) | \
52+ queryset .filter (data_product__data__icontains = value )
0 commit comments