def get_queryset(self): """This queryset uses a special object `Prefetch` to apply specific filters to the Airport.person_set objects; this way we can "filter" on Airport.person_set objects - something that wasn't available a few years ago... Additionally, there's no way to filter out Airports with no instructors.""" # adjust queryset for the request params person_qs = Person.objects.all() publish_profile = None may_contact = None # `self.request` is only available during "real" request-response cycle if hasattr(self, 'request'): publish_profile = str2bool( self.request.query_params.get('publish_profile', None)) may_contact = str2bool( self.request.query_params.get('may_contact', None)) if publish_profile is not None: person_qs = person_qs.filter(publish_profile=publish_profile) if may_contact is not None: person_qs = person_qs.filter(may_contact=may_contact) return (Airport.objects.exclude( person=None).distinct().prefetch_related( Prefetch( 'person_set', queryset=person_qs.filter(badges__in=Badge.objects. instructor_badges()).distinct(), to_attr='public_instructor_set', )))
def get_queryset(self): """This queryset uses a special object `Prefetch` to apply specific filters to the Airport.person_set objects; this way we can "filter" on Airport.person_set objects - something that wasn't available a few years ago... Additionally, there's no way to filter out Airports with no instructors.""" # adjust queryset for the request params person_qs = Person.objects.all() publish_profile = None may_contact = None # `self.request` is only available during "real" request-response cycle if hasattr(self, 'request'): publish_profile = str2bool( self.request.query_params.get('publish_profile', None) ) may_contact = str2bool( self.request.query_params.get('may_contact', None) ) if publish_profile is not None: person_qs = person_qs.filter(publish_profile=publish_profile) if may_contact is not None: person_qs = person_qs.filter(may_contact=may_contact) return ( Airport.objects .exclude(person=None) .distinct() .prefetch_related( Prefetch( 'person_set', queryset=person_qs.filter( badges__in=Badge.objects.instructor_badges() ).distinct(), to_attr='public_instructor_set', ) ) )
def test_none(self): """Ensure `None` is returned for correct input data.""" for element in self.expected_none: self.assertIsNone(str2bool(element), element)
def test_false(self): """Ensure `False` is returned for correct input data.""" for element in self.expected_false: self.assertEqual(str2bool(element), False, element)
def test_true(self): """Ensure `True` is returned for correct input data.""" for element in self.expected_true: self.assertEqual(str2bool(element), True, element)
def test_none(self): """Ensure `None` is returned for correct input data.""" for element in self.expected_none: self.assertIsNone(str2bool(element), element)
def test_false(self): """Ensure `False` is returned for correct input data.""" for element in self.expected_false: self.assertEqual(str2bool(element), False, element)
def test_true(self): """Ensure `True` is returned for correct input data.""" for element in self.expected_true: self.assertEqual(str2bool(element), True, element)