Coverage for dashboard\custom_modules\mixins.py: 25%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from django.shortcuts import get_object_or_404
2from rest_framework.views import APIView
3from dashboard.models import DataPair, Dataset
6class MultipleFieldLookupMixin(APIView):
7 """
8 Apply this mixin to any view or viewset to get multiple field filtering
9 based on a `lookup_fields` attribute, instead of the default single field filtering.
10 """
12 def get_object(self):
13 try:
14 queryset = self.get_queryset() # type: ignore
15 queryset = self.filter_queryset(queryset) # type: ignore
16 filter = {}
17 print(self.lookup_fields)
18 for field in self.lookup_fields: # type: ignore
19 if self.kwargs.get(field, None):
20 if self.__class__.__name__ == "DataPairSurveyView" and field == 'dataset':
21 filter[field] = Dataset.objects.get(name=self.kwargs[field])
22 else:
23 filter[field] = self.kwargs[field]
24 print(filter)
25 print(queryset.filter(**filter).values())
26 obj = get_object_or_404(queryset, **filter) # Lookup the object
27 self.check_object_permissions(self.request, obj)
28 return obj
29 except Exception as e:
30 print(e)
31 raise e
34class GetRelatedMixin:
35 @classmethod
36 def get_related(cls, queryset):
37 if hasattr(cls, "select_related_fields"):
38 queryset = queryset.select_related(*cls.select_related_fields) # type: ignore
39 if hasattr(cls, "prefetch_related_fields"):
40 queryset = queryset.prefetch_related(*cls.prefetch_related_fields) # type: ignore
41 print(DataPair.objects.select_related('dataset').values('dataset__name'))
42 return queryset