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 )
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)
def test_extension_setting_does_not_exist(self): self.assertIsNone(utils.get_setting('FOO'))
def test_extension_setting_exists(self): self.assertEqual('bar', utils.get_setting('FOO'))
def test_rest_framework_settings_only(self): self.assertIsNone(utils.get_setting('not_found'))
def test_no_setting_default(self): self.assertTrue(utils.get_setting('not_found', True))
def test_no_settings(self): self.assertIsNone(utils.get_setting('not_found'))