示例#1
0
文件: views.py 项目: mittald781/amy
    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',
                )))
示例#2
0
    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',
                )
            )
        )
示例#3
0
 def test_none(self):
     """Ensure `None` is returned for correct input data."""
     for element in self.expected_none:
         self.assertIsNone(str2bool(element), element)
示例#4
0
 def test_false(self):
     """Ensure `False` is returned for correct input data."""
     for element in self.expected_false:
         self.assertEqual(str2bool(element), False, element)
示例#5
0
 def test_true(self):
     """Ensure `True` is returned for correct input data."""
     for element in self.expected_true:
         self.assertEqual(str2bool(element), True, element)
示例#6
0
 def test_none(self):
     """Ensure `None` is returned for correct input data."""
     for element in self.expected_none:
         self.assertIsNone(str2bool(element), element)
示例#7
0
 def test_false(self):
     """Ensure `False` is returned for correct input data."""
     for element in self.expected_false:
         self.assertEqual(str2bool(element), False, element)
示例#8
0
 def test_true(self):
     """Ensure `True` is returned for correct input data."""
     for element in self.expected_true:
         self.assertEqual(str2bool(element), True, element)