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

32 statements  

1from django.shortcuts import get_object_or_404 

2from rest_framework.views import APIView 

3from dashboard.models import DataPair, Dataset 

4 

5 

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 """ 

11 

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 

32 

33 

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