示例#1
0
    def get_expand_id_list_field(self, field_name, field_definition):
        """
        Return the Serializer Field instance to represent the ID.

        Arguments:
            field_name (str)
            field_definition (dict)

        Returns:
            (rest_framework.fields.Field)
        """
        method_field_name = 'get_{0}_id_only'.format(field_name)

        # A SerializerMethodField can be used for custom ID generation
        if hasattr(self, method_field_name):
            return serializers.SerializerMethodField(
                method_name=method_field_name, source='*')

        if not field_definition.get('many'):
            raise ValueError("Can only expand as ID-only on *-to-many fields")

        kwargs = dict(many=True, read_only=True)

        if 'source' in field_definition:
            kwargs.update(source=field_definition['source'])

        if utils.get_setting('USE_HASH_IDS', False):
            kwargs.update(pk_field=(custom_fields.HashIdField(
                model=field_definition['id_model'])))

        if 'allow_null' in field_definition:
            kwargs.update(allow_null=field_definition['allow_null'])

        return serializers.PrimaryKeyRelatedField(**kwargs)
 def get_max_expand_depth(self):
     try:
         return self.Meta.max_expand_depth
     except AttributeError:
         return utils.get_setting(
             'MAX_EXPAND_DEPTH', DEFAULT_MAX_EXPAND_DEPTH
         )
示例#3
0
    def get_expand_id_field(self, field_name, field_definition):
        """
        Return the Serializer Field instance to represent the ID.

        Arguments:
            field_name (str)
            field_definition (dict)

        Returns:
            (rest_framework.fields.Field)
        """
        if hasattr(self, 'get_{0}_id'.format(field_name)):
            return serializers.SerializerMethodField(source='*')

        kwargs = dict(read_only=field_definition['read_only'])

        if 'id_source' in field_definition:
            kwargs.update(source=field_definition['id_source'])

        if utils.get_setting('USE_HASH_IDS', False):
            kwargs.update(pk_field=(custom_fields.HashIdField(
                model=field_definition['id_model'])))

        # If the field is to be writable, PrimaryKeyRelatedField needs a
        # queryset from which to find instances
        if not field_definition['read_only']:
            kwargs['queryset'] = (utils.model_from_definition(
                field_definition['id_model']).objects.all())

        return serializers.PrimaryKeyRelatedField(**kwargs)
 def get_extensions_auto_optimize(self):
     """
     Return whether to automatically optimize the queryset.
     """
     try:
         return self.extensions_auto_optimize
     except AttributeError:
         return utils.get_setting("AUTO_OPTIMIZE", default=False)
 def get_extensions_query_params_enabled(self):
     """
     Return whether the serializer context can be set using query params.
     """
     try:
         return self.extensions_query_params_enabled
     except AttributeError:
         return utils.get_setting("QUERY_PARAMS_ENABLED", default=True)
示例#6
0
 def test_extension_setting_does_not_exist(self):
     self.assertIsNone(utils.get_setting('FOO'))
示例#7
0
 def test_extension_setting_exists(self):
     self.assertEqual('bar', utils.get_setting('FOO'))
示例#8
0
 def test_rest_framework_settings_only(self):
     self.assertIsNone(utils.get_setting('not_found'))
示例#9
0
 def test_no_setting_default(self):
     self.assertTrue(utils.get_setting('not_found', True))
示例#10
0
 def test_no_settings(self):
     self.assertIsNone(utils.get_setting('not_found'))