Skip to main content
iVentureTeam

form_page_dependencies

The what-links-here indicator for a website page, resolving the target model from the record before it asks.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 27, 2026Updated August 29, 20264 min read
Technical nameform_page_dependencies
Viewsform (view widget, <widget> element)
Modulewebsite, the Website app
Used in corePage property forms in website
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0
No-code setupNo. It is set in view XML and depends on module-specific data
Alternativesweb_ribbon, url, documentation_link

What the page dependencies does

Deleting a page that other pages link to is how a site grows broken links, and the only way to avoid it is to know what points at the page before you act.

Odoo has a shared component that answers that question and shows the results in a popover. This widget is a version of it for a form where the identifiers are not known up front.

Instead of receiving them, it reads a target model field from the current record and asks about that. Everything else, the fetch, the popover, the cleanup, is inherited.

What this means for your team

Internal link integrity is one of the least glamorous and most consequential parts of running a site. Broken internal links waste crawl budget, frustrate visitors and are almost never noticed by the person who caused them.

Surfacing dependencies at the moment of deletion is the cheapest possible intervention. It is worth pairing with a redirect policy, because knowing what links to a page only helps if there is an agreed answer for what to do about it.

Supported options in Odoo 19

This is one of the few view widgets that declares an extractor, reading four attributes straight from the element rather than taking only the standard props. They are listed below. Read from the page properties source, Odoo 19.0.

OptionTypeWhat it does
resModelattribute read by the extractorThe model whose dependencies are searched.
resIdsattribute, optional hereOptional in this subclass, because the identifiers are resolved from the record instead.
modeattribute read by the extractorPassed through to the shared component, which uses it to decide the display.
nameattribute read by the extractorDefaulted to an empty string so an omitted attribute does not arrive as undefined.(default: empty string)

The identifiers prop is optional here. The base component requires them; this subclass makes them optional because it resolves them from the record instead, which is the entire reason it exists.

Working examples

Placing it

<widget name="form_page_dependencies"
        resModel="ir.model"
        mode="link"/>

The extractor reads these attributes directly.

How targets are resolved

# read target_model_id from the current record
# and ask about that, not about the record

The overridden method, and the only difference.

The base component

# takes resIds as a required prop

Used where the identifiers are already known.

One overridden method, and a rare extractor

The subclass is fifteen lines and overrides one method: the one that supplies the identifiers to ask about.

The base returns whatever was passed in as a prop. This version reads the current record, pulls a target model field from it and returns the identifiers that field points at. So on a form describing a relationship to a model, the dependencies shown are the model's, not the form record's.

Everything downstream is inherited: a single server call collecting URL dependencies for those targets, the popover that displays them, and the careful teardown that waits for the popover's hide event before disposing it.

The extractor is the other notable thing. Most view widgets take only the standard props; this one reads four attributes from the element, defaulting the name to an empty string so an omitted attribute does not surface as undefined. That is what lets the same component serve different models and display modes from view XML.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Byte-identical to Odoo 19 on the development branch.
Odoo 19.0VerifiedVerified against the shipped source.
Odoo 18.0VerifiedSame subclass and extractor.
Odoo 17.0VerifiedSame approach with older component conventions.
Odoo 16.0Not availableWidget does not exist.

Upgrade note. Present since Odoo 17. The subclass and its extractor have been stable across those versions, and the shared component it extends has absorbed the changes.

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 this page after the release.

Byte-identical. The subclass, its optional identifiers prop and its extractor match Odoo 19 exactly on the development branch.

Common problems and fixes

SymptomCause and fix
No dependencies are shownNothing links to the resolved targets. Expected, and the safe case for deletion.
The wrong records are checkedThe widget resolves targets from a model field on the record, not the record itself. Use the base component where the identifiers are already known.
An error about a missing fieldThe record has no target model field to read. Use this widget only on forms that have one.
The popover will not closeThe teardown waits for the hide event before disposing. Expected; it prevents a disposal race.
An attribute is ignoredOnly four attributes are read by the extractor. Check the spelling against those four.
The widget is missingThe Website module is not installed in that database. Install Website.

Page dependencies vs the alternatives

WidgetBest forKey difference
form_page_dependenciesShowing what links to a page when the target has to be resolved from the recordOverrides only the identifier resolution, and declares an extractor, which most view widgets do not
web_ribbonMarking a page's stateA label rather than a dependency check
urlA link fieldOne address rather than what points at it
documentation_linkLinking to documentationAn outbound link rather than inbound references

The base dependencies component is the one to use wherever the identifiers are already known, which is the common case in a dialog. This subclass exists only for forms where they have to be resolved first.

Frequently asked questions

How does this differ from the base component?+
Only in how the target identifiers are found. The base takes them as a prop; this subclass reads a target model field from the current record.
Why is the identifiers prop optional?+
Because this version resolves them itself. Making the prop optional is what allows the subclass to be used without supplying them.
Does it declare options?+
It declares an extractor reading four attributes from the element, which is unusual for a view widget. The name attribute defaults to an empty string.
How many server calls does it make?+
Two: one to read the target model field from the record, and one to collect everything referencing those targets.
Which versions have it?+
Odoo 17 onwards, and byte-identical on the Odoo 20 development branch.

Website changes that do not break what worked

Internal links, redirects and page structure decide whether a redesign keeps its rankings. We handle Odoo Website builds and migrations without losing the links, on versions 16 through 19.

Book a free consultation

How this page was produced

The single overridden identifier resolution reading a target model field from the record, the optional identifiers prop, the inherited single dependency call and popover teardown, and the four attribute extractor with its empty string default were read from the page properties source on the Odoo 19.0 branch. Version coverage comes from comparing the file across the 17.0 and 18.0 branches and its absence on 16.0, plus a byte comparison against the public development branch. Spotted an error? Tell us and we will correct the page.