예제 #1
0
 def test_limit_choices_to(self):
     """
     Make sure existing `limit_choices_to` are taken into consideration
     """
     field = PolymorphicTypeField(Trait, on_delete=models.CASCADE)
     remote_field = get_remote_field(field)
     subclasses_lookup = Trait.subclasses_lookup('pk')
     self.assertEqual(remote_field.limit_choices_to(), subclasses_lookup)
     # Test dict() limit_choices_to.
     limit_choices_to = {'app_label': 'polymodels'}
     field = PolymorphicTypeField(Trait, on_delete=models.CASCADE, limit_choices_to=limit_choices_to)
     remote_field = get_remote_field(field)
     self.assertEqual(
         remote_field.limit_choices_to(), dict(subclasses_lookup, **limit_choices_to)
     )
     # Test Q() limit_choices_to.
     field = PolymorphicTypeField(Trait, on_delete=models.CASCADE, limit_choices_to=Q(**limit_choices_to))
     remote_field = get_remote_field(field)
     self.assertEqual(
         str(remote_field.limit_choices_to()), str(Q(**limit_choices_to) & Q(**subclasses_lookup))
     )
예제 #2
0
    def test_limit_choices_to(self):
        """
        Make sure existing `limit_choices_to` are taken into consideration
        """
        type_field = Trait._meta.get_field('trait_type')
        remote_field = get_remote_field(type_field)

        # Make sure it's cached
        limit_choices_to = remote_field.limit_choices_to
        self.assertIn('limit_choices_to', remote_field.__dict__)

        extra_limit_choices_to = {'app_label': 'polymodels'}

        # Make sure it works with existing dict `limit_choices_to`
        remote_field.limit_choices_to = extra_limit_choices_to
        # Cache should be cleared
        self.assertNotIn('limit_choices_to', remote_field.__dict__)
        self.assertEqual(remote_field.limit_choices_to,
                         dict(extra_limit_choices_to, **limit_choices_to))

        # Make sure it works with existing Q `limit_choices_to`
        remote_field.limit_choices_to = Q(**extra_limit_choices_to)
        # Cache should be cleared
        self.assertNotIn('limit_choices_to', remote_field.__dict__)
        remote_field_limit_choices_to = remote_field.limit_choices_to
        self.assertEqual(remote_field_limit_choices_to.connector, Q.AND)
        self.assertFalse(remote_field_limit_choices_to.negated)
        self.assertEqual(
            remote_field_limit_choices_to.children,
            list(extra_limit_choices_to.items()) +
            list(limit_choices_to.items()))

        # Re-assign the original value
        remote_field.limit_choices_to = None
        # Cache should be cleared
        self.assertNotIn('limit_choices_to', remote_field.__dict__)