sale.order.line : champs, relations et API
Le modèle sale.order.line (« Ligne de commande ») est un modèle persistant déclaré par le module Ventes, puis enrichi par 37 autres modules. Il expose 144 champs, dont 132 déclarés directement sur le modèle ; 26 champs d'autres modèles pointent vers lui. Retrouvez ci-dessous chaque champ avec son nom technique, son type, son libellé français et ses relations, puis un exemple d'appel à l'API JSON-2 d'Odoo 20.
Fiche d'identité
- Nom technique
sale.order.line- Libellé
- Ligne de commande
- Type
- Persistant (models.Model)
- Table SQL
sale_order_line- Module d'origine
- Ventes (
sale) - Étendu par
- sale_management, sale_service, sale_project, delivery, event_sale, event_booth_sale, sale_stock, stock_delivery, repair, sale_purchase, stock_dropshipping, pos_sale, pos_event_sale, pos_repair, pos_sale_loyalty, sale_margin, pos_sale_stock, sale_mrp, sale_expense, sale_edi_ubl, sale_expense_margin, sale_gelato, sale_gelato_stock, sale_loyalty, sale_stock_margin, sale_pdf_quote_builder, sale_product_matrix, sale_purchase_project, sale_stock_product_expiry, sale_timesheet, sale_timesheet_margin, website_sale, website_sale_slides, website_event_booth_sale, website_event_sale, website_sale_collect, website_sale_loyalty
- Tri par défaut (_order)
order_id, sequence, id
Champs du modèle
132 champs propres, 6 hérités des mixins et 6 champs automatiques de l'ORM. Cliquez sur un nom pour obtenir le lien direct vers le champ.
144 champs affichés sur 144
| Nom technique | Libellé | Type | Détails |
|---|---|---|---|
| accrual_move_ids | Accrual Entries Accrual entries generated for this line, so it isn't accrued again while one is still standing (posted, not yet reversed or cancelled). | many2many | |
| allowed_uom_ids | Unité de mesure autorisée | many2many→ uom.uom | calculé |
| amount_invoiced | Montant facturé | monetary | calculé |
| amount_to_invoice | Solde non facturé | monetary | calculé |
| amount_to_invoice_at_date | Montant | float | calculé |
| analytic_line_ids | Lignes analytiques | one2many | inverse : |
| available_product_document_ids | Documents produits disponibles | many2many | calculé ajouté par Sales PDF Quotation Builder ( |
| categ_id | Categ | many2one | related : |
| collapse_composition | Replier la composition | boolean | |
| collapse_prices | Replier les prix | boolean | |
| combo_item_id | Article combo | many2one | |
| company_id | Société | many2one | related : |
| company_price_include | Company Price Include | selection | related : |
| coupon_id | Bon de réduction | many2one | lecture seule ajouté par Sale Loyalty ( |
| currency_id | Devise | many2one | related : |
| customer_lead | Délai Nombre de jours entre la confirmation de la commande et l'expédition des produits | integer | requiscalculé, stocké |
| deferred_revenue | Produits constatés d'avance | boolean | |
| discount | Remise (%) | float | calculé, stocké |
| display_qty_widget | Afficher widget qté | boolean | calculé |
| display_type | Type d'affichage | selection | Valeurs : |
| document_tax_mode | Mode de taxe du document | selection | related : |
| edi_customer_product_ref | Réf. produit client EDI | char | ajouté par Import electronic orders with UBL ( |
| event_booth_category_id | Catégorie des stands | many2one | ajouté par Events Booths Sales ( |
| event_booth_ids | Stands confirmés | one2many | inverse : ajouté par Events Booths Sales ( |
| event_booth_pending_ids | Stands en attente Utilisé pour créer une inscription lors de la fourniture du stand d'événement souhaité. | many2many | calculé ajouté par Events Booths Sales ( |
| event_booth_registration_ids | Inscription confirmée | one2many | inverse : ajouté par Events Booths Sales ( |
| event_id | Événement Choisissez un événement et une inscription pour cet événement sera automatiquement créée | many2one | calculé, stocké ajouté par Events Sales ( |
| event_slot_id | Créneau Choisissez un créneau, un ticket sera automatiquement généré pour celui-ci. | many2one | calculé, stocké ajouté par Events Sales ( |
| event_ticket_id | Type de tickets Choisissez un type de ticket et une inscription pour cet événement sera automatiquement créée. | many2one | calculé, stocké ajouté par Events Sales ( |
| expense_id | Dépense | many2one | ajouté par Sales Expense Margin ( |
| expense_ids | Dépenses | one2many | lecture seule inverse : ajouté par Sales Expense ( |
| extra_tax_data | Données fiscales supplémentaires | json | |
| forecast_expected_date | Date prévue | datetime | calculé ajouté par Sales and Warehouse Management ( |
| free_qty_today | Qté disponible aujourd'hui | float | calculé ajouté par Sales and Warehouse Management ( |
| has_displayed_warning_upsell | Has Displayed Warning Upsell | boolean | ajouté par Sales Timesheet ( |
| invoice_lines | Lignes de facture | many2many | |
| invoice_policy | Politique de facturation | selection | calculé Valeurs : |
| invoice_status | Statut de la facture | selection | calculé, stocké Valeurs : |
| invoice_to_be_issued | Invoice to be Issued | boolean | |
| is_configurable_product | Ce produit est-il configurable ? | boolean | related : |
| is_delivery | Est une livraison | boolean | ajouté par Delivery Costs ( |
| is_donation | Est un don | boolean | calculé ajouté par eCommerce ( |
| is_downpayment | Est un acompte Les acomptes sont effectués lors de la création de factures à partir d'une commande client. Ils ne sont pas copiés lors de la duplication d'une commande client. | boolean | |
| is_expense | Est une dépense Est vrai si la ligne de commande vient d'une dépense ou d'une facture fournisseur | boolean | |
| is_mto | Est fabriqué à la commande ? | boolean | calculé ajouté par Sales and Warehouse Management ( |
| is_multi_slots | Avec créneaux multiples | boolean | related : ajouté par Events Sales ( |
| is_optional | Ligne optionnelle | boolean | ajouté par Ventes ( |
| is_product_archived | Est un produit archivé | boolean | calculé |
| is_repair_line | Est lié à une réparation | boolean | calculé ajouté par POS - Repair ( |
| is_reward_line | Est une ligne de récompense de programme | boolean | calculé ajouté par Sale Loyalty ( |
| is_service | Is a Service | boolean | calculé, stocké ajouté par Sales - Service ( |
| is_storable | Is Storable | boolean | related : |
| label | Libellé | text | calculé |
| linked_line_id | Ligne de commande liée | many2one | |
| linked_line_ids | Lignes de commande liées | one2many | inverse : |
| linked_virtual_id | Lien virtuel | char | |
| mandatory_product | Is Product Mandatory | boolean | calculé |
| margin | Marge | float | calculé, stocké ajouté par Margins in Sales Orders ( |
| margin_percent | Marge (%) | float | calculé, stocké ajouté par Margins in Sales Orders ( |
| move_ids | Mouvements de stock | one2many | inverse : ajouté par Sales and Warehouse Management ( |
| name | Description | text | calculé, stocké |
| name_short | Nom court | char | calculé ajouté par eCommerce ( |
| order_id | Référence commande | many2one | requis |
| order_partner_id | Client | many2one | related : |
| parent_id | Ligne de section parente | many2one | calculé |
| points_cost | Coût des points Combien de points cette récompense coûte sur la carte de fidélité. | float | ajouté par Sale Loyalty ( |
| pos_order_line_ids | Lignes de commandes transférées vers le Point de Vente | one2many | lecture seule inverse : ajouté par POS - Sales ( |
| price_reduce_taxexcl | Remise hors taxes | monetary | calculé, stocké |
| price_reduce_taxinc | Remise toutes taxes comprises | monetary | calculé, stocké |
| price_subtotal | Sous-total | monetary | calculé, stocké |
| price_tax | Total des taxes | float | calculé, stocké |
| price_total | Total | monetary | calculé, stocké |
| price_unit | Prix unitaire | float | requiscalculé, stocké |
| pricelist_item_id | Élément de la liste de prix | many2one | calculé |
| product_add_mode | Product Add Mode | selection | related : ajouté par Sale Matrix ( |
| product_custom_attribute_value_ids | Valeurs personnalisées | one2many | calculé, stocké inverse : |
| product_document_ids | Documents produits Les documents produits pour cette ligne de commande qui seront fusionnés dans le devis PDF. | many2many | ajouté par Sales PDF Quotation Builder ( |
| product_id | Produit | many2one | |
| product_no_variant_attribute_value_ids | Valeur supplémentaire | many2many | calculé, stocké |
| product_qty | Qté de produits | float | calculé ajouté par Delivery Costs ( |
| product_template_attribute_value_ids | Valeur caratéristique du modèle produit | many2many | related : |
| product_template_id | Modèle de produit | many2one | calculé |
| product_type | Type de produit | selection | related : |
| product_uom_id | Unité | many2one→ uom.uom | calculé, stocké |
| product_uom_qty | Quantité | float | requiscalculé, stocké |
| product_uom_readonly | UdM du produit en lecture seule | boolean | calculé |
| product_updatable | Peut modifier le produit | boolean | calculé |
| project_id | Generated Project | many2one | ajouté par Sales - Project ( |
| purchase_line_count | Nombre d'articles d'achat générés | integer | calculé ajouté par Sale Purchase ( |
| purchase_line_ids | Lignes d'achat générées Ligne d'achat générée par cet article de vente lors de la confirmation de la commande, ou quand la quantité a été augmentée. | one2many | lecture seule inverse : ajouté par Sale Purchase ( |
| purchase_price | Coût unitaire | float | calculé, stocké ajouté par Margins in Sales Orders ( |
| qty_available_today | Qté disponible aujourd'hui | float | calculé |
| qty_delivered | Quantité de livraison | float | calculé, stocké |
| qty_delivered_at_date | Livré | float | calculé |
| qty_delivered_method | Méthode de mise à jour des quantités livrées According to product configuration, the delivered quantity can be automatically computed by mechanism: - Manual: the quantity is set manually on the line - Analytic From expenses: the quantity is the quantity sum from posted expenses - Timesheet: the quantity is the sum of hours recorded on tasks linked to this line - Stock Moves: the quantity comes from confirmed pickings | selection | calculé, stocké Valeurs : |
| qty_delivered_percent | Delivered (%) | float | calculé |
| qty_invoiced | Quantité facturée | float | calculé, stocké |
| qty_invoiced_at_date | Facturé | float | calculé |
| qty_invoiced_posted | Quantité facturée (comptabilisée) | float | calculé |
| qty_overage | Qty Overage | float | calculé |
| qty_to_deliver | Qté à livrer | float | calculé ajouté par Sales and Warehouse Management ( |
| qty_to_invoice | Quantité à facturer | float | calculé, stocké |
| reached_milestones_ids | Reached Milestones | one2many | inverse : ajouté par Sales - Project ( |
| recompute_delivery_price | Recompute Delivery Price | boolean | related : ajouté par Delivery Costs ( |
| registration_ids | Inscriptions | one2many | inverse : ajouté par Events Sales ( |
| remaining_hours | Temps restant sur les bons de commande | float | calculé, stocké ajouté par Sales Timesheet ( |
| remaining_hours_available | Heures restantes disponibles | boolean | calculé ajouté par Sales Timesheet ( |
| repair_service_line_id | Repair Service Line | many2one | ajouté par Réparations ( |
| reward_id | Récompense | many2one | lecture seule ajouté par Sale Loyalty ( |
| reward_identifier_code | Code d'identification de la récompense Champ technique utilisé pour relier plusieurs lignes de récompense d'une même récompense entre elles. | char | ajouté par Sale Loyalty ( |
| route_ids | Routes | many2many | ajouté par Sales and Warehouse Management ( |
| sale_line_warn_msg | Message d’avertissement ligne de vente | text | calculé |
| salesman_id | Vendeur | many2one | related : |
| scheduled_date | Date de livraison | datetime | calculé |
| section_qty | Section Quantity | float | calculé, stocké |
| section_uom_id | Section Unit of Measure | many2one→ uom.uom | calculé, stocké |
| selected_combo_items | Articles combinés sélectionnés | char | |
| sequence | Séquence | integer | |
| service_tracking | Service Tracking | selection | related : |
| state | Statut de la commande | selection | related : |
| task_id | Generated Task | many2one | ajouté par Sales - Project ( |
| tax_calculation_rounding_method | Méthode d'arrondi pour le calcul des taxes | selection | lecture seule related : |
| tax_country_id | Pays de la taxe | many2one | related : |
| tax_ids | Taxes | many2many | calculé, stocké |
| technical_price_unit | Prix unitaire technique | float | |
| timesheet_ids | Feuilles de temps | one2many | inverse : ajouté par Sales Timesheet ( |
| untaxed_amount_invoiced | Montant hors taxes facturé | monetary | calculé, stocké |
| untaxed_amount_to_invoice | Montant hors taxes à facturer | monetary | calculé, stocké |
| use_expiration_date | Utiliser la date d'expiration | boolean | related : ajouté par Sale Stock Product Expiry ( |
| virtual_available_at_date | Disponible virtuellement à la date | float | calculé |
| virtual_id | Virtuel | char | |
| warehouse_id | Entrepôt | many2one | calculé, stocké ajouté par Sales and Warehouse Management ( |
| alerts | Alertes | json | hérité de website.checkout.alert.mixin |
| analytic_distribution | Répartition Analytique | json | calculé, stocké hérité de analytic.mixin |
| analytic_precision | Précision analytique | integer | hérité de analytic.mixin |
| consolidation_currency_id | Devise de consolidation | many2one | calculé hérité de res.currency.rate.consolidation.mixin |
| consolidation_rate | Taux | float | calculé hérité de res.currency.rate.consolidation.mixin |
| distribution_analytic_account_ids | Compte analytique de répartition | many2many | calculé hérité de analytic.mixin |
| create_date | Créé le | datetime | lecture seuleautomatique |
| create_uid | Créé par | many2one | lecture seuleautomatique |
| display_name | Nom affiché | char | lecture seulecalculéautomatique |
| id | ID | integer | lecture seuleautomatique |
| write_date | Dernière mise à jour le | datetime | lecture seuleautomatique |
| write_uid | Dernière mise à jour par | many2one | lecture seuleautomatique |
Relations
Modèles liés depuis ce modèle
- account.analytic.line : analytic_line_ids, timesheet_ids
- account.move : accrual_move_ids
- account.move.line : invoice_lines
- account.tax : tax_ids
- event.booth : event_booth_ids, event_booth_pending_ids
- event.booth.category : event_booth_category_id
- event.booth.registration : event_booth_registration_ids
- event.event : event_id
- event.event.ticket : event_ticket_id
- event.registration : registration_ids
- event.slot : event_slot_id
- hr.expense : expense_id, expense_ids
- loyalty.card : coupon_id
- loyalty.reward : reward_id
- pos.order.line : pos_order_line_ids
- product.attribute.custom.value : product_custom_attribute_value_ids
- product.category : categ_id
- product.combo.item : combo_item_id
- product.document : available_product_document_ids, product_document_ids
- product.pricelist.item : pricelist_item_id
- product.product : product_id
- product.template : product_template_id
- product.template.attribute.value : product_no_variant_attribute_value_ids, product_template_attribute_value_ids
- project.milestone : reached_milestones_ids
- project.project : project_id
- project.task : task_id
- purchase.order.line : purchase_line_ids
- repair.service.line : repair_service_line_id
- res.company : company_id
- res.country : tax_country_id
- res.currency : currency_id
- res.partner : order_partner_id
- res.users : salesman_id
- sale.order : order_id
- sale.order.line : linked_line_id, linked_line_ids, parent_id
- stock.move : move_ids
- stock.route : route_ids
- stock.warehouse : warehouse_id
- uom.uom : allowed_uom_ids, product_uom_id, section_uom_id
Champs d'autres modèles qui pointent ici
- account.analytic.line : so_line
- account.move.line : sale_line_ids
- delivery.note.wizard.line : sol_id
- event.booth : sale_order_line_id, sale_order_line_registration_ids
- event.booth.configurator : sale_order_line_id
- event.booth.registration : sale_order_line_id
- event.registration : sale_order_line_id
- event.sale.report : sale_order_line_id
- hr.expense : sale_order_line_id
- mrp.production : sale_line_id
- pos.order.line : sale_order_line_id
- product.attribute.custom.value : sale_order_line_id
- project.milestone : sale_line_id
- project.project : sale_line_id
- project.sale.line.employee.map : sale_line_id
- project.task : last_sol_of_customer, sale_line_id
- purchase.order.line : sale_line_id
- registration.editor.line : sale_order_line_id
- repair.order : sale_order_line_id
- report.project.task.user : sale_line_id
- sale.order.line : linked_line_id, parent_id
- stock.move : sale_line_id
- timesheets.analysis.report : so_line
Lire ce modèle par l'API
Exemple d'appel à l'API JSON-2 d'Odoo 20 : lecture des cinq premiers enregistrements avec des champs réels du modèle. Remplacez l'instance, la base et la clé API par les vôtres.
curl -X POST "https://votre-instance.odoo.com/json/2/sale.order.line/search_read" \
-H "Authorization: bearer $ODOO_API_KEY" \
-H "X-Odoo-Database: votre-base" \
-H "Content-Type: application/json" \
-d '{"domain":[],"fields":["name","customer_lead","order_id","price_unit","product_uom_qty"],"limit":5}'import requests
BASE_URL = "https://votre-instance.odoo.com/json/2"
headers = {"Authorization": f"bearer {API_KEY}", "X-Odoo-Database": "votre-base"}
res = requests.post(
f"{BASE_URL}/sale.order.line/search_read",
headers=headers,
json={"domain": [], "fields": ["name","customer_lead","order_id","price_unit","product_uom_qty"], "limit": 5},
)
res.raise_for_status()
print(res.json())- L'accès à l'API externe est réservé à la formule Custom d'Odoo.
- XML-RPC et JSON-RPC seront retirés dans Odoo 22 (automne 2028) : préférez JSON-2.
- Les droits d'accès et règles d'enregistrement de l'utilisateur de la clé s'appliquent.
Citer cet outil
Vous rédigez un tutoriel, une documentation interne ou une réponse sur un forum ? Copiez ce lien pour renvoyer vos lecteurs vers la fiche à jour.
<a href="https://aidoo.ai/fr/outils/explorateur-modeles-odoo/sale-order-line">sale.order.line (Odoo 20.0)</a>Sources
- Code source du modèle sur GitHub
- Documentation Odoo 20 : ORM API
- Documentation Odoo 20 : API externe JSON-2
Données vérifiées le 25 septembre 2026 · Odoo 20.0 Community
Vous avez un projet Odoo ou souhaitez exploiter votre ERP avec l'IA ? Échangeons
Intégration, développement de modules, connexion de Claude ou ChatGPT à vos données : décrivez-nous votre contexte, nous vous répondons sous 24 heures ouvrées.