Odoo 20.0 Community · Persistent

product.category: fields, relations and API

The product.category model ("Product Category") is a persistent model declared by the Products & Pricelists module, then extended by 9 other modules. It exposes 54 fields, 36 of them declared directly on the model; 22 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 20 JSON-2 API call.

Model identity

Technical name
product.category
Label
Product Category
Type
Persistent (models.Model)
SQL table
product_category
Origin module
Products & Pricelists (product)
Extended by
account, sale, delivery, point_of_sale, stock, stock_account, mrp_account, purchase, pos_stock
Default order (_order)
parent_id desc, name asc
Display field (_rec_name)
complete_name
Inherits from (mixins)
mail.threadpos.load.mixin

Model fields

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

54 of 54 fields shown

Technical nameLabelTypeDetails
account_stock_variation_activeStock Variation Account Activeboolean

related: account_stock_variation_id.active

added by Invoicing (account)

account_stock_variation_idStock Variation Accountmany2one

related: property_stock_valuation_account_id.account_stock_variation_id

added by Invoicing (account)

anglo_saxon_accountingUse Anglo-Saxon Accounting

If checked, the product will be valued using the Anglo-Saxon accounting method.

boolean
computed

added by WMS Accounting (stock_account)

child_idChild Categoriesone2many

inverse: parent_id

company_idCompanymany2one
complete_nameComplete Namechar
computed
filter_for_stock_putaway_rulestock.putaway.ruleboolean

added by Inventory (stock)

nameNamechar
requiredtranslatable
packaging_reserve_methodReserve Packagings

Reserve Only Full Packagings: will not reserve partial packagings. If customer orders 2 pallets of 1000 units each and you only have 1600 in stock, then only 1000 will be reserved Reserve Partial Packagings: allow reserving partial packagings. If customer orders 2 pallets of 1000 units each and you only have 1600 in stock, then 1600 will be reserved

selection

Values: full (Reserve Only Full Packagings), partial (Reserve Partial Packagings)

added by Inventory (stock)

parent_idParent Categorymany2one
parent_pathParent Pathchar
parent_route_idsParent Routesmany2many
computed

added by Inventory (stock)

product_count# Products

The number of products under this category (Does not consider the children categories)

integer
computed
product_properties_definitionProduct Propertiesproperties_definition
property_account_billed_not_received_activeBilled Not Received Account Activeboolean

related: property_account_billed_not_received_id.active

added by Purchase (purchase)

property_account_billed_not_received_idBilled Not Received Account

Account holding the accrued value of the goods billed but not received yet. With perpetual valuation, it counterbalances the stock valuation account at closing.

many2one
company-dependent

added by Purchase (purchase)

property_account_bills_to_receive_activeBills to Receive Account Activeboolean

related: property_account_bills_to_receive_id.active

added by Purchase (purchase)

property_account_bills_to_receive_idBills to Receive Account

Account holding the accrued value of the goods received but not billed yet. With perpetual valuation, it counterbalances the stock valuation account at closing.

many2one
company-dependent

added by Purchase (purchase)

property_account_expense_categ_idExpense Account

The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation.

many2one
company-dependent

added by Invoicing (account)

property_account_income_categ_idIncome Account

This account will be used when validating a customer invoice.

many2one
company-dependent

added by Invoicing (account)

property_account_invoiced_not_delivered_activeInvoiced Not Delivered Account Activeboolean

related: property_account_invoiced_not_delivered_id.active

added by Sales (sale)

property_account_invoiced_not_delivered_idInvoiced Not Delivered Account

Account holding the accrued value of the goods invoiced but not delivered yet. With perpetual valuation, it counterbalances the stock valuation account at closing.

many2one
company-dependent

added by Sales (sale)

property_account_invoices_to_issue_activeInvoices to be Issued Account Activeboolean

related: property_account_invoices_to_issue_id.active

added by Sales (sale)

property_account_invoices_to_issue_idInvoices to be Issued Account

Account holding the accrued value of the goods delivered but not invoiced yet. With perpetual valuation, it counterbalances the stock valuation account at closing.

many2one
company-dependent

added by Sales (sale)

property_cost_methodCosting Method

Standard Price: The products are valued at their standard cost defined on the product. Average Cost (AVCO): The products are valued at weighted average cost.

selection
company-dependent

Values: standard (Standard Price), average (Average Cost (AVCO))

added by Invoicing (account)

property_price_difference_account_activePrice Difference Account Activeboolean

related: property_price_difference_account_id.active

added by Invoicing (account)

property_price_difference_account_idPrice Difference Account

With perpetual valuation, this account will hold the price difference between the standard price and the bill price.

many2one
company-dependent

added by Invoicing (account)

property_stock_account_production_cost_idProduction Account

This account will be used as a valuation counterpart for both components and final products for manufacturing orders. If there are any workcenter/employee costs, this value will remain on the account once the production is completed.

many2one
company-dependent

added by Accounting - MRP (mrp_account)

property_stock_journalStock Journal

When doing automated inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed.

many2one
company-dependent

added by Invoicing (account)

property_stock_valuation_account_activeStock Valuation Account Activeboolean

related: property_stock_valuation_account_id.active

added by Invoicing (account)

property_stock_valuation_account_idStock Valuation Account

When automated inventory valuation is enabled on a product, this account will hold the current value of the products.

many2one
company-dependent

added by Invoicing (account)

property_valuationInventory Valuation

Periodic: The accounting entries are suggested manually in the inventory valuation report. Perpetual: An accounting entry is automatically created to value the inventory when a product is billed or invoiced.

selection
company-dependent

Values: periodic (Periodic (at closing)), real_time (Perpetual (at invoicing))

added by Invoicing (account)

putaway_rule_idsPutaway Rulesone2many

inverse: category_id

added by Inventory (stock)

removal_strategy_idForce Removal Strategy

Set a specific removal strategy that will be used regardless of the source location for this product category. FIFO: products/lots that were stocked first will be moved out first. LIFO: products/lots that were stocked last will be moved out first. Closest location: products/lots closest to the target location will be moved out first. FEFO: products/lots with the closest removal date will be moved out first (the availability of this method depends on the "Expiration Dates" setting). Least Packages: FIFO but with the least number of packages possible when there are several packages containing the same product.

many2one

added by Inventory (stock)

route_idsRoutesmany2many

added by Inventory (stock)

total_route_idsTotal routesmany2many
read-onlycomputed

added by Inventory (stock)

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

rating_idsRatingsone2many

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

  • account.account: account_stock_variation_id, property_account_billed_not_received_id, property_account_bills_to_receive_id, property_account_expense_categ_id, property_account_income_categ_id, property_account_invoiced_not_delivered_id, property_account_invoices_to_issue_id, property_price_difference_account_id, property_stock_account_production_cost_id, property_stock_valuation_account_id
  • account.journal: property_stock_journal
  • product.category: child_id, parent_id
  • product.removal: removal_strategy_id
  • res.company: company_id
  • stock.putaway.rule: putaway_rule_ids
  • stock.route: parent_route_ids, route_ids, total_route_ids

Fields of other models pointing here

Reading this model through the API

Odoo 20 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/product.category/search_read" \
  -H "Authorization: bearer $ODOO_API_KEY" \
  -H "X-Odoo-Database: your-db" \
  -H "Content-Type: application/json" \
  -d '{"domain":[],"fields":["complete_name","name","account_stock_variation_id","company_id","parent_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}/product.category/search_read",
    headers=headers,
    json={"domain": [], "fields": ["complete_name","name","account_stock_variation_id","company_id","parent_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/product-category">product.category (Odoo 20.0)</a>

Sources

Data verified on September 25, 2026 · Odoo 20.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.