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 fakturor 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. Varje modell i Odoo följer samma mönster.
Denna artikel fokuserar på en av de viktigaste modellerna i Odoo: produkt.template. Oavsett om du bygger anpassade moduler, integrerar externa system eller konfigurerar produktkataloger, kommer du att arbeta med denna modell.
Vad är produkt.template-modellen
Produkt.template-modellen representerar en grupp av liknande produkter som endast skiljer sig åt i några egenskaper, såsom storlek eller färg. Istället för att skapa separata produktregister för varje variation, organiseras produkterna i mallar med varianter.
Denna modell i Odoo används inom Försäljning, Inköp, Lager, E-handel och Tillverkning. När du skapar en produkt i katalogen skapar du en produkt.template-post. När du skapar en kundorder väljer du från produktvarianter som ärver från mallen.
Modellen definieras i produktmodulen. Andra moduler utökar den genom Odoo-modelarv. Försäljning lägger till prissättning och fakturering. Inköp lägger till leverantörshantering. Lager lägger till lageruppföljning. Varje modul lägger till vad den behöver utan att duplicera kärnstrukturen.
Att förstå skillnaden mellan produkt.template och produkt.product är avgörande. Mallen håller gemensamma data. Varianten (produkt.product) håller variant-specifika data som streckkod och SKU.
Nyckelfält i modellen
Här är de viktigaste Odoo-fälten i produkt.template-modellen. Att förstå dessa kommer att hjälpa dig att arbeta effektivt med produkter.
1. namn
Typ: Char. Detta fält lagrar namnet på produkten. Det visas i många Odoo-vyer och är den primära identifieraren för produktmallen.
2. create_date
Typ: Datetime. Lagrar datum och tid när posten skapades. Hanteras automatiskt av Odoo. Användbart för rapportering och granskning.
3. write_date
Typ: Datetime. Lagrar datum och tid för den senaste ändringen. Hanteras också automatiskt. Hjälper till att spåra när data senast uppdaterades.
4. aktiv
Typ: Boolean. Flag för mjuk radering. När False arkiveras posten och döljs från standardvyer. Poster raderas inte fysiskt.
5. sekvens
Typ: Heltal. Visningsordning för sortering. Används i produktlistor och rullgardinsmenyer. Lägre värden visas först.
6. typ
Typ: Val. Produkttyp: Förbrukningsvara, Tjänst eller Lagringsprodukt. Förbrukningsvaror spåras inte i lager. Tjänster har ingen fysisk inventering. Lagringsprodukter spåras i inventeringen.
7. categ_id
Typ: Many2one (product.category). Produktkategori. Styr rapportering, standardvägar och katalogorganisation. Kategorier kan vara hierarkiska.
8. list_price
Typ: Float. Försäljningspris. Används som standard vid skapande av offerter. Kan åsidosättas av prislistor eller variant-specifik prissättning.
9. standard_price
Typ: Float. Kostnadspris. Används för marginalberäkningar och lagervärdering. Påverkar lönsamhetsrapporter.
10. currency_id
Typ: Many2one (res.currency). Valutan för list_price och standard_price. Vanligtvis ärvd från företaget.
11. uom_id
Typ: Many2one (uom.uom). Måttenhet för försäljning. Definierar hur kvantiteter uttrycks (t.ex. Enheter, Kg, Liter).
12. uom_po_id
Typ: Many2one (uom.uom). Måttenhet för inköp. Kan skilja sig från uom_id för konverteringsscenarier.
13. default_code
Typ: Char. Intern referens eller kod. Användbar för extern systemkartläggning och anpassad numrering. Används ofta som SKU.
14. barcode
Typ: Char. Streckkod för skanning. Används i POS, lager och inventering. För varianter är streckkoden vanligtvis på product.product.
15. description
Typ: Char. Intern beskrivning. Synlig endast för interna användare. Används för interna anteckningar om produkten.
16. description_sale
Typ: Text. Försäljningsbeskrivning. Visas på offerter och fakturor. Kan inkludera HTML för formatering.
17. beskrivning_inköp
Typ: Text. Inköpsbeskrivning. Visas på inköpsorder och leverantörsfakturor. Hjälper köpare att kommunicera med leverantörer.
18. försäljning_ok
Typ: Boolean. Indikerar om produkten kan säljas. När False, döljs produkten från försäljnings- och offertformulär.
19. inköp_ok
Typ: Boolean. Indikerar om produkten kan köpas. När False, döljs produkten från inköpsformulär.
20. vikt
Typ: Float. Produktens vikt. Används för fraktberäkningar och logistik. Enhet beror på företagets UoM-inställningar.
21. volym
Typ: Float. Produktens volym. Används för logistik och lagerkapacitetsplanering.
22. produkt_variant_ids
Typ: One2many (product.product). Listan över produktvarianter. Varje variant ärver från mallen.
23. product_variant_count
Typ: Heltal. Antal varianter. Beräknas från product_variant_ids. Används för visning och filtrering.
24. image_1920
Typ: Binär. Produktbild. Odoo lagrar flera storlekar. Används i formulär, rapporter och på webbplatsen.
25. responsible_id
Typ: Many2one (res.users). Den ansvariga användaren. Används för produktförvaltning och aktivitetsuppdrag.
26. company_id
Typ: Many2one (res.company). I flerföretagsinställningar anger detta vilken Odoo-företag produkten tillhör.
27. tax_ids
Typ: Many2many (account.tax). Kundskatter för försäljning. Tillämpas på fakturor och offerter.
28. supplier_tax_id
Typ: Many2many (account.tax). Leverantörsskatter för inköp. Tillämpas på leverantörsfakturor.
29. attribute_line_ids
Typ: One2many. Produktattributlinjer för varianter. Definierar vilka attribut (t.ex. Storlek, Färg) som skapar varianter.
30. route_ids
Typ: Many2many (stock.route). Lagervägar. Bestämmer hur produkten rör sig genom försörjningskedjan (t.ex. Köp, Tillverka på beställning).
31. property_stock_production
Typ: Many2one (stock.location). Produktionsplats för tillverkade produkter. Används när typ är Lagringsbar och rutt inkluderar tillverkning.
32. property_stock_inventory
Typ: Many2one (stock.location). Justeringsplats för lager. Används för lagerinventeringar och korrigeringar.
33. property_valuation
Typ: Val. Lagervärderingsmetod: Automatisk eller Manuell. Påverkar hur kostnaden beräknas.
34. property_cost_method
Typ: Val. Kostnadsmetod: Standard eller FIFO. Bestämmer hur lagervärdet beräknas.
35. property_account_income_id
Typ: Many2one (account.account). Inkomstkonto för försäljning. Används vid fakturering.
36. property_account_expense_id
Typ: Many2one (account.account). Utgiftskonto för inköp. Används vid mottagande av leverantörsfakturor.
37. invoice_policy
Typ: Val. När man ska fakturera: Beställda kvantiteter eller Levererade kvantiteter. Påverkar när intäkter redovisas.
38. expense_policy
Typ: Val. När man ska kostnadsföra: Beställda eller Levererade. Påverkar när kostnader redovisas.
39. service_type
Typ: Val. För tjänsteprodukter: Manuell, Tidsrapport eller Milstolpar. Bestämmer hur tjänster spåras och faktureras.
40. optional_product_ids
Typ: Many2many (product.template). Valfria produkter för merförsäljning. Visas när denna produkt läggs till i en offert.
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 produkter från katalogen. Produktmodellen product.template ger basprodukten. Varianter väljs när produkten har attribut (storlek, färg).
2. E-handel
På webbplatsen ser kunder produktmallar i katalogen. När de klickar på en produkt kan de välja bland varianter. Mallen innehåller den gemensamma beskrivningen och bilder.
3. Inköp och Leverantörer
Inköpsorder och leverantörsfakturor kopplas till product.template. Fältet purchase_ok styr synligheten. supplier_tax_id och uom_po_id påverkar inköpsbeteendet.
4. Lager och Tillverkning
Lagerflyttar och tillverkningsorder refererar till produktvarianter. Mallen definierar rutter, värdering och kostnadsmetod. Lager hålls reda på per variant.
5. Fakturering
Fakturor och räkningar refererar till produktlinjer. Mallen tillhandahåller skatteregler och bokföringskonton. Fakturapolitik avgör när intäkter redovisas.
Hur utvecklare utökar denna modell
Utvecklare utökar product.template med flera mönster. Odoo-modellarv är den huvudsakliga mekanismen.
Modell Arv
Använd _inherit = 'product.template' för att utöka modellen. Detta är Odoo-modellarv i arbete. 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. När du ärver en modell i Odoo, utökar du den utan att modifiera originalet.
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. Tänk på företagsberoende fält för flera företag.
Python Utvidgningar
Åsidosätt create, write eller unlink för att lägga till logik. Använd super() för att anropa originalet. Var försiktig med beräknade fält och deras beroenden.
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.
Bästa praxis
- Använd template-variant relationen korrekt. Sätt delad data på mallen, variant-specifik data på product.product.
- Ställ in categ_id för korrekt routing och rapportering. Kategorier driver standardbeteende.
- Använd default_code för extern systemkartläggning. Håll det unikt när det är möjligt.
- När du bygger API-integrationer, använd XML-RPC eller JSON-RPC API. Modellen product.template är helt exponerad som en API-modell i Odoo. Kartlägg externa ID noggrant.
- För anpassade fält, använd
x_-prefixet eller ett modulprefix för att undvika konflikter med framtida Odoo-versioner.
Vanliga misstag
- Skapa duplicerade mallar istället för att använda varianter. Använd attribute_line_ids för produkter som endast skiljer sig i storlek, färg, etc.
- Blanda ihop product.template och product.product. När du behöver variant-specifik data (streckkod, SKU), använd product.product.
- Glöm inte att ställa in sale_ok eller purchase_ok. Produkter döljs från formulär när dessa är False.
- Överskridande av kärnmetoder utan att kalla super(). Detta kan bryta andra moduler eller framtida uppgraderingar.
- Lägg till obligatoriska anpassade fält utan standardvärden. Befintliga poster kommer att misslyckas med validering vid uppgradering.
Slutsats
Modellen product.template är central för Odoo. Den lagrar produktdefinitioner och delade attribut. Att förstå dess fält och hur moduler utökar den 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.template att spara tid och förhindra fel.
Kom igång med Dasolo
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 Odoo:s dataarkitektur och modeller som product.template.
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.