quotation_document_many2many
The upload area for the PDF pages Odoo wraps around a quotation. It borrows the product document kanban wholesale and changes three things: where uploads go, what they attach to, and that only PDFs are accepted.
| Technical name | quotation_document_many2many |
|---|---|
| Field types | many2many, one2many |
| Views | form, with an embedded kanban |
| Module | sale_pdf_quote_builder, the quotation PDF builder |
| Used in core | 1 occurrence, the quotation template form in sale_pdf_quote_builder |
| Versions | Odoo 20.0, Odoo 19.0, Odoo 18.0 |
| No-code setup | No. It posts to a module-specific upload route |
| Alternatives | many2many_binary, binary, x2_many_image, one2many |
What the quotation documents field does
What this means for your team
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
uploadRoute | fixed in the source | Where uploaded files are posted. Not configurable from the view.(default: the quote builder's upload route)(since Odoo 18.0) |
allowedMIMETypes | fixed in the source | Passed to the upload control, so the file dialog itself filters to PDFs. Not configurable from the view.(default: application/pdf)(since Odoo 18.0) |
sale_order_template_id | form data key | Captured from the record when the component starts and sent with every upload, so the file is attached to the right quotation template.(since Odoo 18.0) |
All three settings are fixed in the source. The upload route, the accepted file type and the key identifying the template are written into the widget, so there is no way to accept another format or post elsewhere without replacing it.
Working examples
Borrowed wholesale, configured in three lines
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | In development | Not released. Byte-identical to Odoo 19 on the development branch. |
| Odoo 19.0 | Verified | Verified against the shipped source. The template identity is captured once at startup. |
| Odoo 18.0 | Verified | First version. The identity was recomputed before every render. |
| Odoo 17.0 | Not available | Widget does not exist. |
| Odoo 16.0 | Not available | Widget does not exist. |
Upgrade note. The widget arrived in Odoo 18 and needs no view change. The Odoo 19 difference is internal: the template identity is captured once at startup rather than before every render, which matters only if you reuse the widget on an unsaved record.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| Uploads are rejected | The file is not a PDF; the accepted type is fixed in the source. Export the page to PDF before uploading. |
| Uploads do not attach to the template | The template identity was captured before the record was saved. Save the quotation template first, then upload. |
| The upload area does not appear | The embedded view is not a kanban, so the renderer the widget substitutes is not used. Use the field with its kanban subview, as the core form does. |
| Options are ignored | The widget declares none, and the x2many descriptor forwards the dictionary to the embedded view. Nothing to configure here. |
| Files upload but the PDF is unchanged | The documents are attached but not enabled in the quote builder configuration. Check the builder settings on the template. |
| Missing widget error | The quote builder module is not installed in that database. Install the PDF quote builder. |
Quotation documents field vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
quotation_document_many2many | Uploading the PDF pages that wrap a generated quotation | Reuses the product document kanban with a fixed route, template key and PDF-only restriction |
| many2many_binary | A plain list of attached files | No kanban cards, no drop area and no route |
| binary | A single file on the record | One field, one file |
x2_many_image | Image galleries on a relation | Images with a media dialog rather than PDF uploads |
| one2many | Editing the document records themselves | A table rather than an upload area |
Frequently asked questions
Why are only PDFs accepted?+
Why do my uploads not attach?+
Can I change the upload route?+
Is it the same interface as product documents?+
What changed in Odoo 19?+
Quotations that look like your company sent them
Branded covers, terms and closing pages wrapped around every quote are a setup job once, not a design job per deal. We configure Odoo's quote builder and the sales documents around it, on versions 16 through 19.
Book a free consultation