# Customize a field
## Subclass an existing field component
Let's take an example where we want to extends the `BooleanField` to create a boolean field
displaying "Late!" in red whenever the checkbox is checked.
1. Create a new widget component extending the desired field component.
```{code-block} javascript
:caption: :file:`late_order_boolean_field.js`
import { registry } from "@web/core/registry";
import { BooleanField } from "@web/views/fields/boolean/boolean_field";
import { Component, xml } from "@odoo/owl";
class LateOrderBooleanField extends BooleanField {
static template = "my_module.LateOrderBooleanField";
}
```
2. Create the field template.
The component uses a new template with the name `my_module.LateOrderBooleanField`. Create it by
inheriting the current template of the `BooleanField`.
```{code-block} xml
:caption: :file:`late_order_boolean_field.xml`
Late!
```
3. Register the component to the fields registry.
```{code-block}
:caption: :file:`late_order_boolean_field.js`
registry.category("fields").add("late_boolean", LateOrderBooleanField);
```
4. Add the widget in the view arch as an attribute of the field.
```xml
```
## Create a new field component
Assume that we want to create a field that displays a simple text in red.
1. Create a new Owl component representing our new field
```{code-block} js
:caption: :file:`my_text_field.js`
import { standardFieldProps } from "@web/views/fields/standard_field_props";
import { Component, xml } from "@odoo/owl";
import { registry } from "@web/core/registry";
export class MyTextField extends Component {
static template = xml`
`;
static props = { ...standardFieldProps };
static supportedTypes = ["char"];
/**
* @param {boolean} newValue
*/
onChange(newValue) {
this.props.update(newValue);
}
}
```
The imported `standardFieldProps` contains the standard props passed by the `View` such as
the `update` function to update the value, the `type` of the field in the model, the
`readonly` boolean, and others.
2. In the same file, register the component to the fields registry.
```{code-block} js
:caption: :file:`my_text_field.js`
registry.category("fields").add("my_text_field", MyTextField);
```
This maps the widget name in the arch to its actual component.
3. Add the widget in the view arch as an attribute of the field.
```xml
```