Introduktion
I Odoo definerer modeller, hvordan data er struktureret og gemt i databasen. Hver enkelt del af forretningsdata, du arbejder med, fra salgsordrer til lager til produkter, lever i en model.
At forstå Odoo-modeller er essentielt for både udviklere og funktionelle konsulenter. Modellerne er fundamentet for Odoo's dataarkitektur. De definerer Odoo-felter, relationer og forretningslogik.
Denne artikel fokuserer på en af de vigtigste modeller i Odoo: produkt.product. Uanset om du bygger tilpassede moduler, integrerer eksterne systemer eller konfigurerer produktkataloger, vil du arbejde med denne model.
Hvad er produkt.product-modellen
Produkt.product-modellen repræsenterer de faktiske produktvarianter i Odoo. Disse er de konkrete, salgbare og købbare varer, der vises på salgsordrer, indkøbsordrer og lagerbevægelser.
Denne model i Odoo er forskellig fra product.template. Skabelonen indeholder delte attributter for en produktfamilie. Produkt.product-posterne er de specifikke varianter. For et simpelt produkt uden varianter er der én product.product pr. product.template. For konfigurerbare produkter (f.eks. T-shirt med størrelse og farve) er hver kombination en separat product.product.
Modellen er defineret i produktmodulet (product). Salg, indkøb, lager og e-handel refererer alle til product.product. Når du tilføjer en linje til et tilbud eller modtager lager, arbejder du med product.product-poster.
product.product bruger delegationsarv fra product.template. Mange Odoo-felter er defineret på skabelonen og arvet af varianten. Dette holder delte data ét sted, mens det tillader variant-specifikke overskrivninger.
Nøglefelter i modellen
Her er de vigtigste Odoo-felter i product.product-modellen. At forstå disse vil hjælpe dig med at arbejde effektivt med produktvarianter.
1. navn
Type: Char. Dette felt gemmer navnet på produktvarianten. Det vises typisk i lister, formularer og dokumenter. For simple produkter matcher det skabelonens navn. For varianter kan det inkludere attributværdier (f.eks. "T-Shirt - Blå / M").
2. product_tmpl_id
Type: Many2one (product.template). Knytter varianten til dens overordnede skabelon. Dette er den centrale relation. Hver product.product tilhører præcist én product.template. Brug dette, når du har brug for at arve model i Odoo eller udvide produktlogik.
3. default_code
Type: Char. Intern reference eller SKU. Bruges til identifikation, stregkodesøgning og integration med eksterne systemer. Hver variant kan have sin egen kode.
4. stregkode
Type: Char. Stregkode (EAN, UPC osv.). Bruges til scanning i POS, lager og inventar. Skal være unik på tværs af produkter, når den er indstillet.
5. oprettelsesdato
Type: Datetime. Gemmer dato og tidspunkt for, hvornår posten blev oprettet. Administreres automatisk af Odoo. Nyttig til rapportering og revision.
6. ændringsdato
Type: Datetime. Gemmer dato og tidspunkt for den sidste ændring. Også administreret automatisk. Hjælper med at spore, hvornår data sidst blev opdateret.
7. aktiv
Type: Boolean. Blød sletteflag. Når den er False, arkiveres posten og skjules fra standardvisninger. Produkter slettes ikke fysisk for at bevare historikken.
8. type
Type: Selection. Produkttype: Forbrugsvare, Service eller Lagerprodukt. Forbrugsvare spores ikke i lageret. Tjenester har ikke lager. Lagerprodukter spores i lageret. Dette bestemmer, hvilke moduler og arbejdsgange der gælder.
9. kategori_id
Type: Many2one (product.category). Produktkategori. Bruges til rapportering, prisregler og katalogorganisation. Kategorier kan have en forælder-barn hierarki.
10. listepris
Type: Float. Salgsprisen. Vist på tilbud og brugt som standard ved tilføjelse af en linje. Kan overskrives pr. kunde eller af prislister.
11. standard_price
Type: Float. Omkostningsprisen. Bruges til lagervurdering og marginberegninger. Typisk opdateret via indkøbsordrer eller manuel indtastning.
12. uom_id
Type: Many2one (uom.uom). Enhed for salg og lager. Definerer hvordan mængder udtrykkes (enheder, kg, liter osv.).
13. uom_po_id
Type: Many2one (uom.uom). Enhed for indkøb. Kan adskille sig fra uom_id (f.eks. købe i kasser, sælge i enheder). Konvertering håndteres automatisk.
14. description_sale
Type: Html. Salgsbeskrivelse. Vist på tilbud, ordrer og fakturaer. Kan inkludere formatering og produktdetaljer.
15. description_purchase
Type: Html. Indkøbsbeskrivelse. Vist på indkøbsordrer og leverandørfakturaer. Bruges til intern og leverandørkommunikation.
16. sale_ok
Type: Boolean. Kan sælges. Når False, er produktet skjult for salg og e-handel. Nyttigt for interne eller kun-købsvarer.
17. purchase_ok
Type: Boolean. Kan købes. Når False, er produktet skjult for køb. Nyttigt for fremstillede eller kun-salgsvarer.
18. image_1920
Type: Binary. Produktbillede i fuld opløsning. Odoo gemmer flere størrelser (image_512, image_256, osv.) til visning. Bruges i formularer, e-handel og rapporter.
19. weight
Type: Float. Produktvægt. Bruges til forsendelsesberegninger og logistik. Enhed afhænger af virksomhedens konfiguration.
20. volume
Type: Float. Produktvolumen. Bruges til forsendelse og lagerkapacitet. Vigtigt for virksomheder med volumetriske begrænsninger.
21. company_id
Type: Many2one (res.company). I multi-virksomhedsopsætninger angiver dette, hvilken virksomhed der ejer produktet. Påvirker registreringssynlighed og lager.
22. currency_id
Type: Many2one (res.currency). Valuta for list_price og standard_price. Normalt virksomhedens valuta. Prislister kan konvertere til andre valutaer.
23. qty_available
Type: Float. Mængde på lager. Beregnet ud fra lagerkvantiteter. Kun til læsning. Bruges til tilgængelighedstjek og rapporter. Kun for opbevaringsprodukter.
24. virtual_available
Type: Float. Forudset mængde (på lager plus indkommende minus udgående). Bruges til tilgængelighed og genopfyldning. Kun til læsning, beregnet felt.
25. product_template_attribute_value_ids
Type: Many2many. Links til attributværdier, der definerer denne variant (f.eks. Farve=Blå, Størrelse=M). Bruges til variantkonfiguration og filtrering.
26. sequence
Type: Integer. Visningsrækkefølge. Bruges til at sortere produkter i lister og konfigureringsværktøjer. Lavere værdier vises først.
27. display_name
Type: Char. Beregnet visningsnavn. Kombinerer navn med variantattributter. Bruges i many2one dropdowns og søgeresultater. Kun til læsning.
28. responsible_id
Type: Many2one (res.users). Ansvarlig person for produktet. Bruges til genbestillingsregler og intern tildeling. Valgfri.
Hvordan denne model bruges i forretningsarbejdsgange
1. Salg og Tilbud
Når en sælger opretter et tilbud, vælger de et produkt.product fra kataloget. list_price, description_sale og uom_id flyder til ordrelinjen. Prislister kan overskrive prisen. Kun produkter med sale_ok=True vises.
2. Indkøb og Leverandører
Indkøbsordrer og leverandørfakturaer refererer til produkt.product. standard_price opdateres fra indkøbsomkostninger. Produkter med purchase_ok=True er tilgængelige. uom_po_id definerer, hvordan mængder bestilles (f.eks. pr. kasse).
3. Lager og Beholdning
Lagerbevægelser, plukninger og kvantiteter bruger alle produkt.product. Felterne qty_available og virtual_available styrer tilgængelighed. Kun opbevaringsprodukter spores. Stregkodescanning bruger stregkodefeltet til hurtig opslag.
4. E-handel og Hjemmeside
Webshoppen viser produkt.product poster. Varianter med forskellige attributter (størrelse, farve) vises som muligheder. Produktbilleder, beskrivelser og priser kommer fra modellen. sale_ok-flaget styrer synlighed.
5. Produktion og MRP
Materialelister refererer til produkt.product for både komponenter og færdigvarer. type-feltet bestemmer, om et produkt er fremstillet (opbevaringsbart) eller forbrugt. Lagerbeholdninger styrer produktionsplanlægning.
Hvordan udviklere udvider denne model
Udviklere udvider produkt.product ved hjælp af flere mønstre. Odoo modelarv er den primære mekanisme.
Model Arv
Brug _inherit = 'product.product' for at udvide modellen. Tilføj nye Odoo-felter, overskriv metoder eller tilføj begrænsninger. Den arvede model i Odoo holder dine ændringer i et separat modul for nem opgradering. Vælg product.product når feltet er variant-specifikt; brug product.template når det gælder hele produktfamilien.
Tilføjelse af Felter
Definer nye Odoo-felter i din arvede model. Brug den rigtige felttype: Char, Many2one, Boolean, Integer, Text, Selection. Overvej om feltet tilhører skabelonen (fælles) eller varianten (specifik). For variant-specifik data som SKU eller stregkode-overskrivninger, brug product.product.
Python Udvidelser
Overskriv create, write eller unlink for at tilføje logik. Brug super() til at kalde den originale. Vær forsigtig med beregnede felter og deres afhængigheder. product.product modellen har mange beregnede felter fra lager- og salgsmoduler.
Odoo Studio
Odoo Studio lader dig tilføje felter uden kode. Godt til hurtige tilpasninger. For kompleks logik eller opgraderinger er brugerdefinerede moduler mere vedligeholdelsesvenlige. API-modellen i Odoo (product.product) er fuldt eksponeret via XML-RPC og JSON-RPC til integrationer.
Bedste praksis
- Brug default_code eller stregkode til kortlægning af eksterne systemer. Hold dem unikke og konsistente.
- Indstil type korrekt for hvert produkt. Forbrugelig vs Opbevaringsbar vs Service påvirker hvilke moduler og arbejdsgange der gælder.
- Når du bygger API-integrationer, brug product.product til ordrelinjer og transaktioner. Brug product.template til katalogniveau operationer.
- For brugerdefinerede felter, brug
x_præfikset eller et modulpræfiks for at undgå konflikter med fremtidige Odoo-versioner. - Overvej product.template, når du tilføjer felter, der gælder for alle varianter (f.eks. mærke, kategori). Brug product.product til variant-specifik data (f.eks. variant-specifik stregkode).
Almindelige fejl
- Arv fra product.template, når du har brug for variant-specifik logik. Brug product.product til per-variant adfærd.
- Opret product.product poster manuelt i stedet for gennem skabelonen. For variantprodukter, opret dem via produktkonfiguratoren.
- Glem ikke at indstille sale_ok eller purchase_ok. Produkter er som standard skjult for salg/køb i nogle konfigurationer.
- Overskrivning af kerne metoder uden at kalde super(). Dette kan bryde andre moduler eller fremtidige opgraderinger.
- Brug af product.product i domæner, når product.template ville være mere passende (f.eks. filtrering efter kategori på skabelonen).
Konklusion
product.product modellen er central for Odoos produktarkitektur. Den repræsenterer de faktiske salgbare og købbare varer. At forstå dens felter og hvordan den relaterer til product.template vil hjælpe dig med at konfigurere, tilpasse og integrere Odoo effektivt.
Uanset om du er en funktionel konsulent, der kortlægger produktkataloger, eller en udvikler, der bygger tilpassede moduler, vil en solid forståelse af product.product spare tid og forhindre fejl.
Har du brug for hjælp til din Odoo-implementering?
Dasolo hjælper virksomheder med at implementere, tilpasse og optimere Odoo. Vi specialiserer os i API-integrationer og Odoo-udvikling. Vores team har dyb erfaring med Odoo's dataarkitektur og modeller som product.product.
Hvis du har brug for hjælp med din Odoo-implementering, tilpassede moduler eller integrationer, er vi her for at hjælpe. Book en demo for at diskutere dit projekt.