Introduktion
I Odoo definierar modeller hur data struktureras och lagras i databasen. Varje bit affärsdata du arbetar med, från försäljningsorder till lager till produkter, lever i en modell.
Att förstå Odoo-modeller är avgörande för både utvecklare och funktionella konsulter. Modeller är grunden för Odoos dataarkitektur. De definierar Odoo-fält, relationer och affärslogik.
Denna artikel fokuserar på en av de viktigaste modellerna i Odoo: produkt.product. Oavsett om du bygger anpassade moduler, integrerar externa system eller konfigurerar produktkataloger, kommer du att arbeta med denna modell.
Vad är produkt.product-modellen
Produkt.product-modellen representerar de faktiska produktvarianterna i Odoo. Dessa är de konkreta, säljbara och inköpsbara artiklar som visas på försäljningsorder, inköpsorder och lagerflyttningar.
Denna modell i Odoo skiljer sig från product.template. Mallen innehåller delade attribut för en produktfamilj. Produkt.product-posterna är de specifika varianterna. För en enkel produkt utan varianter finns det en produkt.product per product.template. För konfigurerbara produkter (t.ex. T-shirt med storlek och färg) är varje kombination en separat produkt.product.
Modellen definieras i produktmodulen (product). Försäljning, inköp, lager och e-handel refererar alla till produkt.product. När du lägger till en rad i en offert eller tar emot lager arbetar du med produkt.product-poster.
Produkt.product använder delegationsarv från product.template. Många Odoo-fält definieras på mallen och ärvda av varianten. Detta håller delad data på ett ställe samtidigt som det möjliggör specifika överskrivningar för varianter.
Nyckelfält i modellen
Här är de viktigaste Odoo-fälten i produkt.product-modellen. Att förstå dessa kommer att hjälpa dig att arbeta effektivt med produktvarianter.
1. namn
Typ: Char. Detta fält lagrar namnet på produktvarianten. Det visas vanligtvis i listor, formulär och dokument. För enkla produkter matchar det mallens namn. För varianter kan det inkludera attributvärden (t.ex. "T-Shirt - Blå / M").
2. product_tmpl_id
Typ: Many2one (product.template). Länkar varianten till sin föräldramall. Detta är den centrala relationen. Varje produkt.product tillhör exakt en product.template. Använd detta när du behöver ärva modell i Odoo eller utöka produktlogik.
3. default_code
Typ: Char. Intern referens eller SKU. Används för identifiering, streckkodssökning och integration med externa system. Varje variant kan ha sin egen kod.
4. streckkod
Typ: Tecken. Streckkod (EAN, UPC, etc.). Används för scanning i POS, lager och inventering. Måste vara unik över produkter när den är inställd.
5. skapelsedatum
Typ: Datum och tid. Lagrar datum och tid när posten skapades. Hanteras automatiskt av Odoo. Användbart för rapportering och granskning.
6. ändringsdatum
Typ: Datum och tid. Lagrar datum och tid för den senaste ändringen. Hanteras också automatiskt. Hjälper till att spåra när data senast uppdaterades.
7. aktiv
Typ: Boolean. Mjuk raderingsflagga. När den är False, arkiveras posten och döljs från standardvyer. Produkter raderas inte fysiskt för att bevara historik.
8. typ
Typ: Val. Produkttyp: Förbrukningsvara, Tjänst eller Lagringsprodukt. Förbrukningsvaror spåras inte i lager. Tjänster har inget lager. Lagringsprodukter spåras i lager. Detta styr vilka moduler och arbetsflöden som tillämpas.
9. categ_id
Typ: Many2one (product.category). Produktkategori. Används för rapportering, prissättningsregler och katalogorganisation. Kategorier kan ha en förälder-barn-hierarki.
10. listpris
Typ: Float. Försäljningspriset. Visas på offerter och används som standard när en rad läggs till. Kan åsidosättas per kund eller av prislistor.
11. standard_price
Typ: Float. Kostnadspriset. Används för lagervärdering och marginalberäkningar. Uppdateras vanligtvis av inköpsorder eller manuell inmatning.
12. uom_id
Typ: Many2one (uom.uom). Enhet för mått för försäljning och lager. Definierar hur kvantiteter uttrycks (enheter, kg, liter, etc.).
13. uom_po_id
Typ: Many2one (uom.uom). Enhet för mått för inköp. Kan skilja sig från uom_id (t.ex. köpa i lådor, sälja i enheter). Konvertering hanteras automatiskt.
14. description_sale
Typ: Html. Försäljningsbeskrivning. Visas på offerter, beställningar och fakturor. Kan inkludera formatering och produktdetaljer.
15. description_purchase
Typ: Html. Inköpsbeskrivning. Visas på inköpsorder och leverantörsfakturor. Används för intern och leverantörskommunikation.
16. sale_ok
Typ: Boolean. Kan säljas. När False är produkten gömd från försäljning och e-handel. Användbart för interna eller endast köpprodukter.
17. purchase_ok
Typ: Boolean. Kan köpas. När False är produkten gömd från köp. Användbart för tillverkade eller endast försäljningsprodukter.
18. image_1920
Typ: Binär. Produktbild i full upplösning. Odoo lagrar flera storlekar (image_512, image_256, etc.) för visning. Används i formulär, e-handel och rapporter.
19. weight
Typ: Float. Produktens vikt. Används för fraktberäkningar och logistik. Enhet beror på företagskonfiguration.
20. volume
Typ: Float. Produktens volym. Används för frakt och lagerkapacitet. Viktigt för företag med volymbegränsningar.
21. company_id
Typ: Many2one (res.company). I flerföretagsinställningar anger detta vilket företag som äger produkten. Påverkar registreringssynlighet och lager.
22. currency_id
Typ: Many2one (res.currency). Valuta för list_price och standard_price. Vanligtvis företagets valuta. Prislistor kan konvertera till andra valutor.
23. qty_available
Typ: Float. Kvantitet på lager. Beräknas från lagerkvantiteter. Endast för läsning. Används för tillgänglighetskontroller och rapporter. Endast för lagringsbara produkter.
24. virtual_available
Typ: Float. Prognostiserad kvantitet (på lager plus inkommande minus utgående). Används för tillgänglighet och påfyllning. Endast för läsning beräknat fält.
25. product_template_attribute_value_ids
Typ: Many2many. Länkar till attributvärden som definierar denna variant (t.ex. Färg=Blå, Storlek=M). Används för variantkonfiguration och filtrering.
26. sequence
Typ: Integer. Visningsordning. Används för att sortera produkter i listor och konfigurerare. Lägsta värden visas först.
27. display_name
Typ: Char. Beräknat visningsnamn. Kombinerar namn med variantattribut. Används i many2one rullgardinsmenyer och sökresultat. Endast för läsning.
28. responsible_id
Typ: Many2one (res.users). Ansvarig person för produkten. Används för ombeställningsregler och intern tilldelning. Valfritt.
Hur denna modell används i affärsarbetsflöden
1. Försäljning och Offert
När en säljare skapar en offert väljer de en product.product från katalogen. list_price, description_sale och uom_id flödar till orderlinjen. Priskataloger kan åsidosätta priset. Endast produkter med sale_ok=True visas.
2. Inköp och Leverantörer
Inköpsorder och leverantörsfakturor refererar till product.product. standard_price uppdateras från inköpskostnader. Produkter med purchase_ok=True är tillgängliga. uom_po_id definierar hur kvantiteter beställs (t.ex. per låda).
3. Lager och Stock
Lagerflyttar, plockningar och kvantiteter använder alla product.product. fälten qty_available och virtual_available styr tillgänglighet. Endast lagringsbara produkter spåras. Streckkodsskanning använder fältet för streckkod för snabb uppslagning.
4. E-handel och Webbplats
Webbshoppen visar product.product-poster. Varianter med olika attribut (storlek, färg) visas som alternativ. Produktbilder, beskrivningar och priser kommer från modellen. sale_ok-flaggan styr synlighet.
5. Tillverkning och MRP
Materiallistor refererar till product.product för både komponenter och färdiga varor. fältet typ avgör om en produkt tillverkas (lagringsbar) eller konsumeras. Lager nivåer styr produktionsplanering.
Hur utvecklare utökar denna modell
Utvecklare utökar product.product med flera mönster. Odoo-modellarv är den huvudsakliga mekanismen.
Modellarv
Använd _inherit = 'product.product' för att utöka modellen. Lägg till nya Odoo-fält, åsidosätt metoder eller lägg till begränsningar. Den ärvda modellen i Odoo håller dina ändringar i en separat modul för enkla uppgraderingar. Välj product.product när fältet är variant-specifikt; använd product.template när det gäller hela produktfamiljen.
Lägga till fält
Definiera nya Odoo-fält i din ärvda modell. Använd rätt fälttyp: Char, Many2one, Boolean, Integer, Text, Selection. Överväg om fältet tillhör mallen (delad) eller varianten (specifik). För variant-specifik data som SKU eller streckkodsåsidosättningar, använd product.product.
Python-tillägg
Åsidosätt create, write eller unlink för att lägga till logik. Använd super() för att anropa den ursprungliga. Var försiktig med beräknade fält och deras beroenden. Modellen product.product har många beräknade fält från lager- och försäljningsmoduler.
Odoo Studio
Odoo Studio låter dig lägga till fält utan kod. Bra för snabba anpassningar. För komplex logik eller uppgraderingar är anpassade moduler mer underhållbara. API-modellen i Odoo (product.product) är helt exponerad via XML-RPC och JSON-RPC för integrationer.
Bästa praxis
- Använd default_code eller streckkod för extern systemkartläggning. Håll dem unika och konsekventa.
- Ställ in typ korrekt för varje produkt. Konsumtion vs Lagring vs Tjänst påverkar vilka moduler och arbetsflöden som gäller.
- När du bygger API-integrationer, använd product.product för orderrader och transaktioner. Använd product.template för katalognivåoperationer.
- För anpassade fält, använd
x_-prefixet eller ett modulprefix för att undvika konflikter med framtida Odoo-versioner. - Överväg product.template när du lägger till fält som gäller för alla varianter (t.ex. märke, kategori). Använd product.product för variant-specifik data (t.ex. variant-specifik streckkod).
Vanliga misstag
- Ärva från product.template när du behöver variant-specifik logik. Använd product.product för per-variant beteende.
- Skapa product.product-poster manuellt istället för genom mallen. För variantprodukter, skapa dem via produktkonfiguratorn.
- Glöm inte att ställa in sale_ok eller purchase_ok. Produkter är dolda från försäljning/köp som standard i vissa konfigurationer.
- Överskridande av kärnmetoder utan att kalla super(). Detta kan bryta andra moduler eller framtida uppgraderingar.
- Använda product.product i domäner när product.template skulle vara mer lämpligt (t.ex. filtrering efter kategori på mallen).
Slutsats
product.product-modellen är central för Odoos produktarkitektur. Den representerar de faktiska säljbara och köpbara artiklarna. Att förstå dess fält och hur det relaterar till product.template kommer att hjälpa dig att konfigurera, anpassa och integrera Odoo effektivt.
Oavsett om du är en funktionell konsult som kartlägger produktkataloger eller en utvecklare som bygger anpassade moduler, kommer en solid förståelse av product.product att spara tid och förhindra fel.
Behöver du hjälp med din Odoo-implementering?
Dasolo hjälper företag att implementera, anpassa och optimera Odoo. Vi specialiserar oss på API-integrationer och Odoo-utveckling. Vårt team har djup erfarenhet av Odoos dataarkitektur och modeller som product.product.
Om du behöver hjälp med din Odoo-implementering, anpassade moduler eller integrationer, är vi här för att hjälpa till. Boka en demo för att diskutera ditt projekt.