Odoo 19.0 Community · Persistent

purchase.order: fields, relations and API

The purchase.order model ("Purchase Order") is a persistent model declared by the Purchase module, then extended by 14 other modules. It exposes 104 fields, 71 of them declared directly on the model; 14 fields from other models point to it. Below you will find every field with its technical name, type, label and relations, followed by an Odoo 19 JSON-2 API call.

Model identity

Technical name
purchase.order
Label
Purchase Order
Type
Persistent (models.Model)
SQL table
purchase_order
Origin module
Purchase (purchase)
Extended by
purchase_stock, sale_purchase, sale_purchase_stock, stock_dropshipping, mrp_subcontracting_dropshipping, purchase_mrp, mrp_subcontracting_purchase, project_purchase, project_purchase_stock, purchase_edi_ubl_bis3, purchase_product_matrix, purchase_repair, purchase_requisition, purchase_requisition_stock
Default order (_order)
priority desc, id desc
Inherits from (mixins)
portal.mixinproduct.catalog.mixinmail.threadmail.activity.mixinaccount.document.import.mixin

Model fields

71 own fields, 27 inherited from mixins and 6 automatic ORM fields. Click a name to get a direct link to that field.

104 of 104 fields shown

Technical nameLabelTypeDetails
acknowledgedAcknowledged

It indicates that the vendor has acknowledged the receipt of the purchase order.

boolean
alternative_po_idsAlternative POs

Other potential purchase orders for purchasing products

one2many

related: purchase_group_id.order_ids

added by Purchase Agreements (purchase_requisition)

amount_taxTaxesmonetary
read-onlycomputed, stored
amount_totalTotalmonetary
read-onlycomputed, stored
amount_total_ccTotal in currencymonetary
read-onlycomputed, stored
amount_untaxedUntaxed Amountmonetary
read-onlycomputed, stored
company_currency_idCompany Currencymany2one

related: company_id.currency_id

company_idCompanymany2one
required
company_price_includeCompany Price Includeselection

related: company_id.account_price_include

country_codeCountry codechar

related: company_id.account_fiscal_country_id.code

currency_idCurrencymany2one
requiredcomputed, stored
currency_rateCurrency Ratefloat
computed, stored
date_approveConfirmation Datedatetime
read-only
date_calendar_startDate Calendar Startdatetime
read-onlycomputed, stored
date_orderOrder Deadline

Depicts the date within which the Quotation should be confirmed and converted into a purchase order.

datetime
required
date_plannedExpected Arrival

Delivery date promised by vendor. This date is used to determine expected arrival of products.

datetime
computed, stored
default_location_dest_id_is_subcontracting_locDefault Location Dest Id Is Subcontracting Locboolean
computed

added by Dropship and Subcontracting Management (mrp_subcontracting_dropshipping)

default_location_dest_id_usageDestination Location Type

Technical field used to display the Drop Ship Address

selection
read-only

related: picking_type_id.default_location_dest_id.usage

added by Purchase Stock (purchase_stock)

dest_address_idDropship Address

Put an address if you want to deliver directly from the vendor to the customer. Otherwise, keep empty to deliver to your own company.

many2one
computed, stored
dropship_picking_countDropship Countinteger
computed

added by Drop Shipping (stock_dropshipping)

duplicated_order_idsDuplicated Ordermany2many
computed
effective_dateArrival

Completion date of the first receipt order.

datetime
computed, stored

added by Purchase Stock (purchase_stock)

fiscal_position_idFiscal Positionmany2one
gridGrid

Technical storage of grid. If grid_update, will be loaded on the PO. If not, represents the matrix to open.

char

added by Purchase Matrix (purchase_product_matrix)

grid_product_tmpl_idGrid Product Tmpl

Technical field for product_matrix functionalities.

many2one

added by Purchase Matrix (purchase_product_matrix)

grid_updateGrid Update

Whether the grid field contains a new matrix to apply or not.

boolean

added by Purchase Matrix (purchase_product_matrix)

has_sale_orderTechnical field for whether the purchase order has associated sale ordersboolean
computed

added by Sale Purchase (sale_purchase)

incoming_picking_countIncoming Shipment countinteger
computed

added by Purchase Stock (purchase_stock)

incoterm_idIncoterm

International Commercial Terms are a series of predefined commercial terms used in international transactions.

many2one
incoterm_locationIncoterm Locationchar

added by Purchase Stock (purchase_stock)

invoice_countBill Countinteger
computed, stored
invoice_idsBillsmany2many
computed, stored
invoice_statusBilling Statusselection
read-onlycomputed, stored

Values: no (Nothing to Bill), to invoice (Waiting Bills), invoiced (Fully Billed)

is_lateIs Lateboolean
is_shippedIs Shippedboolean
computed

added by Purchase Stock (purchase_stock)

lock_confirmed_poLock Confirmed Poselection

related: company_id.po_lock

lockedLocked

Locked Purchase Orders cannot be modified.

boolean
mrp_production_countCount of MO Sourceinteger
computed

added by Purchase and MRP Management (purchase_mrp)

nameOrder Referencechar
required
noteTerms and Conditionshtml
on_time_rateOn Time Ratefloat

related: partner_id.on_time_rate

added by Purchase Stock (purchase_stock)

on_time_rate_percOTDfloat
computed

added by Purchase Requisition Stock (purchase_requisition_stock)

order_lineOrder Linesone2many

inverse: order_id

originSource

Reference of the document that generated this purchase order request (e.g. a sales order)

char
partner_bill_countPartner Bill Countinteger

related: partner_id.supplier_invoice_count

partner_idVendor

You can find a vendor by its Name, TIN, Email or Internal Reference.

many2one
required
partner_refVendor Reference

Reference of the sales order or bid sent by the vendor. It's used to do the matching when you receive the products as this reference is usually written on the delivery order sent by your vendor.

char
payment_term_idPayment Termsmany2one
picking_idsReceptionsmany2many
computed, stored

added by Purchase Stock (purchase_stock)

picking_type_idDeliver To

This will determine operation type of incoming shipment

many2one
required

added by Purchase Stock (purchase_stock)

priorityPriorityselection

Values: 0 (Normal), 1 (Urgent)

product_idProductmany2one

related: order_line.product_id

project_idProjectmany2one

added by Project Purchase (project_purchase)

purchase_group_idPurchase Groupmany2one

added by Purchase Agreements (purchase_requisition)

purchase_warning_textPurchase Warning

Internal warning for the partner or the products as set by the user.

text
computed
receipt_reminder_emailReceipt Reminder Emailboolean
computed, stored
receipt_statusReceipt Status

Red: Late Orange: To process today Green: On time

selection
computed, stored

Values: pending (Not Received), partial (Partially Received), full (Fully Received)

added by Purchase Stock (purchase_stock)

reference_idsReferencesmany2many

added by Purchase Stock (purchase_stock)

reminder_date_before_receiptDays Before Receiptinteger
computed, stored
repair_countCount of source repairsinteger
computed

added by Purchase Repair (purchase_repair)

report_gridsPrint Variant Grids

If set, the matrix of configurable products will be shown on the report of this order.

boolean

added by Purchase Matrix (purchase_product_matrix)

requisition_idAgreementmany2one

added by Purchase Agreements (purchase_requisition)

requisition_typeRequisition Typeselection

related: requisition_id.requisition_type

added by Purchase Agreements (purchase_requisition)

sale_order_countNumber of Source Saleinteger
computed

added by Sale Purchase (sale_purchase)

show_comparisonShow Comparisonboolean
computed
stateStatusselection
read-only

Values: draft (RFQ), sent (RFQ Sent), to approve (To Approve), purchase (Purchase Order), cancel (Cancelled)

subcontracting_resupply_picking_countCount of Subcontracting Resupply

Count of Subcontracting Resupply for component

integer
computed

added by Purchase and Subcontracting Management (mrp_subcontracting_purchase)

tax_calculation_rounding_methodTax calculation rounding methodselection
read-only

related: company_id.tax_calculation_rounding_method

tax_country_idTax Country

Technical field to filter the available taxes depending on the fiscal country and fiscal position.

many2one
computed
tax_totalsTax Totalsbinary
computed
user_idBuyermany2one
access_tokenSecurity Tokenchar

inherited from portal.mixin

access_urlPortal Access URL

Customer Portal URL

char
computed

inherited from portal.mixin

access_warningAccess warningtext
computed

inherited from portal.mixin

activity_calendar_event_idNext Activity Calendar Eventmany2one
computed

inherited from mail.activity.mixin

activity_date_deadlineNext Activity Deadlinedate
read-onlycomputed

inherited from mail.activity.mixin

activity_exception_decorationActivity Exception Decoration

Type of the exception activity on record.

selection
computed

Values: warning (Alert), danger (Error)

inherited from mail.activity.mixin

activity_exception_iconIcon

Icon to indicate an exception activity.

char
computed

inherited from mail.activity.mixin

activity_idsActivitiesone2many

inverse: res_id

inherited from mail.activity.mixin

activity_stateActivity State

Status based on activities Overdue: Due date is already passed Today: Activity date is today Planned: Future activities.

selection
computed

Values: overdue (Overdue), today (Today), planned (Planned)

inherited from mail.activity.mixin

activity_summaryNext Activity Summarychar

related: activity_ids.summary

inherited from mail.activity.mixin

activity_type_iconActivity Type Iconchar

related: activity_ids.icon

inherited from mail.activity.mixin

activity_type_idNext Activity Typemany2one

related: activity_ids.activity_type_id

inherited from mail.activity.mixin

activity_user_idResponsible Usermany2one
read-onlycomputed

inherited from mail.activity.mixin

has_messageHas Messageboolean
computed

inherited from mail.thread

message_attachment_countAttachment Countinteger
computed

inherited from mail.thread

message_follower_idsFollowersone2many

inverse: res_id

inherited from mail.thread

message_has_errorMessage Delivery error

If checked, some messages have a delivery error.

boolean
computed

inherited from mail.thread

message_has_error_counterNumber of errors

Number of messages with delivery error

integer
computed

inherited from mail.thread

message_has_sms_errorSMS Delivery error

If checked, some messages have a delivery error.

boolean
computed

inherited from mail.thread

message_idsMessagesone2many

inverse: res_id

inherited from mail.thread

message_is_followerIs Followerboolean
computed

inherited from mail.thread

message_needactionAction Needed

If checked, new messages require your attention.

boolean
computed

inherited from mail.thread

message_needaction_counterNumber of Actions

Number of messages requiring action

integer
computed

inherited from mail.thread

message_partner_idsFollowers (Partners)many2many
computed

inherited from mail.thread

my_activity_date_deadlineMy Activity Deadlinedate
read-onlycomputed

inherited from mail.activity.mixin

rating_idsRatingsone2many

inverse: res_id

inherited from mail.thread

website_message_idsWebsite Messages

Website communication history

one2many

inverse: res_id

inherited from mail.thread

create_dateCreated ondatetime
read-onlyautomatic
create_uidCreated bymany2one
read-onlyautomatic
display_nameDisplay Namechar
read-onlycomputedautomatic
idIDinteger
read-onlyautomatic
write_dateLast Updated ondatetime
read-onlyautomatic
write_uidLast Updated bymany2one
read-onlyautomatic

Relations

Models linked from this model

Fields of other models pointing here

Reading this model through the API

Odoo 19 JSON-2 API call reading the first five records with real fields of the model. Replace the instance, database and API key with your own.

curl
curl -X POST "https://your-instance.odoo.com/json/2/purchase.order/search_read" \
  -H "Authorization: bearer $ODOO_API_KEY" \
  -H "X-Odoo-Database: your-db" \
  -H "Content-Type: application/json" \
  -d '{"domain":[],"fields":["name","company_id","currency_id","date_order","partner_id"],"limit":5}'
Python (requests)
import requests

BASE_URL = "https://your-instance.odoo.com/json/2"
headers = {"Authorization": f"bearer {API_KEY}", "X-Odoo-Database": "your-db"}

res = requests.post(
    f"{BASE_URL}/purchase.order/search_read",
    headers=headers,
    json={"domain": [], "fields": ["name","company_id","currency_id","date_order","partner_id"], "limit": 5},
)
res.raise_for_status()
print(res.json())
  • External API access requires Odoo's Custom plan.
  • XML-RPC and JSON-RPC will be removed in Odoo 22 (fall 2028): use JSON-2.
  • The access rights and record rules of the key's user apply.

Cite this tool

Writing a tutorial, internal documentation or a forum answer? Copy this link to send your readers to the up-to-date reference.

<a href="https://aidoo.ai/en/outils/explorateur-modeles-odoo/purchase-order">purchase.order (Odoo 19.0)</a>

Sources

Data verified on September 23, 2026 · Odoo 19.0 Community

Have an Odoo project, or want to put your ERP to work with AI? Let's talk

Implementation, custom module development, connecting Claude or ChatGPT to your data: tell us about your context and we will reply within 24 business hours.