'Construct a field description for the schema
@param field: a Field instance
@return: the field description as JSON-serializable dict'

def describe(self, field):

    fieldtype = str(field.type)
    SUPPORTED_FIELD_TYPES = set(self.SUPPORTED_FIELD_TYPES)
    if (fieldtype[:9] == 'reference'):
        key = s3_get_foreign_key(field)[1]
        if (key and (key != 'id')):
            return None
        is_foreign_key = True
        lookup = fieldtype[10:].split('.')[0]
        references = self._references
        if (lookup not in references):
            references[lookup] = set()
    else:
        is_foreign_key = False
        lookup = None
    if ((fieldtype in SUPPORTED_FIELD_TYPES) or is_foreign_key):
        supported = True
    else:
        supported = False
    if (not supported):
        return None
    description = {'type': fieldtype, 'label': str(field.label)}
    settings = self.settings(field)
    if settings:
        description['settings'] = settings
    options = self.get_options(field, lookup=lookup)
    if options:
        description['options'] = options
    default = self.get_default(field, lookup=lookup)
    if default:
        description['default'] = default
    return description
