Skip to main content
iVentureTeam

datetime_scheduled_date

The send time on a scheduled message, opened through a dialog rather than a date picker. Its sibling in the same file offers a Remove button; this one deliberately does not.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 27, 2026Updated September 7, 20265 min read
Technical namedatetime_scheduled_date
Field typesdatetime
Viewsform
Modulemail, the Discuss module
Used in core1 occurrence, the scheduled message form in mail
VersionsOdoo 20.0, Odoo 19.0
No-code setupNo. It writes a specific field name and pairs with a scheduling dialog
Alternativestext_scheduled_date, datetime, date

What the scheduled date button does

Scheduling a message is a small decision with several shapes: tomorrow morning, next Monday, a specific moment. A raw datetime picker asks the user to translate their intention into a date and a time, which is more work than the decision deserves.

Odoo answers that with a dialog offering sensible presets and a custom option, and this widget is the button that opens it. The current value is rendered compactly, clicking opens the dialog, and choosing writes the result back to the record.

There are two variants in the same file because the same idea is stored two ways: as text in the message composer, and as a real datetime on a scheduled message record. This page is about the datetime one.

What this means for your team

Send-time scheduling is one of those features that only gets used if choosing a time is faster than not bothering. Presets are what make that true, and they are the reason this is a dialog rather than a picker.

The difference between the two variants is worth understanding when customizing. On a composer, scheduling is optional, so clearing the date has to be possible. On a scheduled message record, the date is the whole point, so this variant removes that affordance. Copying the wrong one into a custom view produces either a message that cannot be unscheduled or one that can be left without a time.

Working examples

The core usage

<field name="scheduled_date"
       widget="datetime_scheduled_date"/>

The field name matters: the widget writes that name literally when the dialog is confirmed.

The text variant

<field name="scheduled_date"
       widget="text_scheduled_date"/>

Same dialog, but it serializes to text and allows the date to be cleared, which suits the composer.

The plain alternative

<field name="scheduled_date" widget="datetime"/>

A standard picker: full control, no presets, and no idea that this is a send time.

Two variants, three differences

A shared base holds everything both variants have in common: the dialog service, a compact date format, and a click handler that opens the scheduling dialog with a save callback, the current value and a removable flag. The handler also blurs the button afterwards, with a comment explaining that it otherwise keeps a focused appearance once the dialog closes.

Each variant then supplies three things: whether the dialog offers removal, how to read the current value from the record, and how to write it back. The text variant deserializes and serializes, and passes an empty string when cleared. This one reads the datetime directly and writes it directly, and sets the removable flag to false.

The detail to watch when reusing either is that the write targets a hardcoded field name rather than the widget's own field. On the core usages the two coincide, so it is invisible; on a differently named field the widget renders the value it was given and then writes somewhere else.

Neither variant declares supported types, so nothing prevents putting the datetime one on a text field or the other way round. The result would be a value the getter cannot interpret, so match the variant to the field's type deliberately.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Behavior identical on the development branch; only the props syntax changes.
Odoo 19.0VerifiedFirst version, with scheduled messages. Verified against the shipped source.
Odoo 18.0Not availableWidget does not exist.
Odoo 17.0Not availableWidget does not exist.
Odoo 16.0Not availableWidget does not exist.

Upgrade note. Both variants are new in Odoo 19, together with scheduled messages. There is nothing to migrate from earlier versions, where the feature did not exist.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. The development branch is unstable and this may still change; we re-verify the page after release.

No behavior change. The pairing, the removable flag and the hardcoded write are identical on the development branch. The props move to the new schema syntax, which affects code that patches the widget rather than views.

Common problems and fixes

SymptomCause and fix
There is no way to clear the dateIntended. This variant sets the dialog as not removable, because a scheduled message needs a send time. Use the text variant if clearing must be possible.
The chosen date is not savedThe widget writes a hardcoded field name, which does not match the field it was placed on. Use it only on the field it was written for, or patch the write.
The value renders as invalidThe variant does not match the field's type; this one expects a datetime. Use the text variant on a text field.
The button stays highlighted after closing the dialogThe handler blurs it deliberately; a customization may have dropped that. Keep the blur call when overriding the click handler.
Options are ignoredThe registration has no extractor. Nothing to configure here.
Missing widget errorThe Discuss module is not installed in that database. Install Discuss, or use a plain datetime picker.

Scheduled date button vs the alternatives

WidgetBest forKey difference
datetime_scheduled_dateThe send time on a scheduled message, where a time is mandatoryOpens the scheduling dialog without a remove option and writes a datetime directly
text_scheduled_dateThe same dialog in the message composerStores text, and allows the schedule to be cleared
datetimeA general date and time valueA standard picker with no presets
dateA date without a timeNo time component at all

Use the text variant on a composer, where scheduling is optional and stored as text. Use a plain datetime picker where the user genuinely needs full control and presets would get in the way, such as a date far in the future. The presets are the whole value here, so if they do not fit your case, the widget does not either.

Frequently asked questions

Why can I not clear the scheduled date?+
This variant sets the scheduling dialog as not removable. A scheduled message with no send time has nothing to schedule, unlike a composer where scheduling is optional.
What is the difference between the two scheduled date widgets?+
Three things: whether the dialog offers removal, and how the value is read and written. One serializes to text for the composer; this one reads and writes a real datetime.
Can I use it on any datetime field?+
Not safely. The write targets a hardcoded field name rather than the field the widget renders, so it only behaves correctly on the field it was written for.
Does it take any options?+
None. The registration provides only a component, with no options, no extractor and no supported types.
Which versions have it?+
Odoo 19 onwards, introduced with scheduled messages. Behavior is unchanged on the Odoo 20 development branch.

Messages that land when your customer is reading

Scheduled sending, templates and follow-up sequences are small settings that change response rates. We set up Odoo Discuss, email and the automation around them on versions 16 through 19.

Book a free consultation

How this page was produced

The shared base, the removable flag, the two value accessors and the hardcoded field name were read from scheduled_date_field.js on the Odoo 19.0 branch, with the usage taken from mail/views/mail_scheduled_message_views.xml. Version coverage comes from the absence of the file on 16.0, 17.0 and 18.0, and a comparison against the public development branch. Spotted an error? Tell us and we will correct the page.