shortcut
Odoo 19's shortcut widget dresses a plain char field with a fixed :: prefix, so the canned response form reads exactly like what users will type in the Discuss composer.
August 24, 2026Updated August 24, 20266 min read
| Technical name | shortcut |
|---|---|
| Field types | char |
| Views | list, form, kanban |
| Module | mail, shipped with every Odoo database |
| Used in core | 3 occurrences in the mail module, all on mail.canned.response |
| Versions | Odoo 20.0, Odoo 19.0 |
| No-code setup | No. XML only, and only worth it for shortcut-like fields |
| Alternatives | char, char_with_placeholder_field, text |
What the shortcut widget does
What this means for your team
Working examples
What a bare component registration means
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | In development | Not released. Byte-level framework migration only on the development branch; behavior unchanged. See below. |
| Odoo 19.0 | Verified | Introduced in 19.0 with the mail.canned.response model; verified against the shipped source. |
| Odoo 18.0 | Not available | Does not exist; canned responses (mail.shortcode) used a plain char field. |
| Odoo 17.0 | Not available | Does not exist. |
| Odoo 16.0 | Not available | Does not exist. |
Upgrade note. The widget is new in Odoo 19, arriving together with the mail.canned.response model rename (from mail.shortcode in earlier versions). Views migrated from 18 that still target the old model need more than the widget to work.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| Custom placeholder attribute does not show | The component hardcodes the placeholder to e.g. hello after spreading props. Accept the default, or subclass the widget to change it. |
| Canned response triggers with four colons | The user typed :: into the field although the widget already displays the prefix. Store the shortcut without colons; the field value must be the bare text. |
| Options in XML have no effect | Bare component registration; there is no extractProps to read them. None needed, the widget is configuration-free by design. |
| Widget renders on a non-char field with odd results | No supportedTypes declared, so nothing blocks the assignment. Keep it on char fields; use proper widgets elsewhere. |
| Shortcut field is grayed out for some users | Core binds readonly to is_editable, which reflects access to shared responses. Expected: users edit their own responses, managers edit shared ones. |
Shortcut widget vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
shortcut | Char fields always used with the :: trigger syntax | Fixed :: prefix and forced placeholder, zero configuration |
char | Ordinary single-line text | Full option and attribute support, no prefix |
| char_with_placeholder_field | Char fields with a record-driven placeholder | Dynamic placeholder from another field, no prefix |
| text | Multi-line content like the response body | Textarea rendering, used right next to this widget on the same form |
Frequently asked questions
What does the shortcut widget do in Odoo?+
Are the colons stored in the field?+
Does the shortcut widget have any options?+
Can I use the shortcut widget on my own fields?+
How do canned responses relate to this widget?+
Does the widget change in Odoo 20?+
Roll out canned responses your team actually uses
We set up canned response libraries with naming schemes that scale past fifty entries, scope them per team, and build the same double-colon ergonomics into custom apps. Small Discuss tweaks like this are where support teams win back an hour a day.
Boost my team's Discuss workflow