Hoppa till innehåll
Odoo Meny
  • Logga in
  • Prova gratis
  • Appar
    Ekonomi
    • Bokföring
    • Fakturering
    • Utgifter
    • Kalkylark (Affärsanalyser)
    • Dokument
    • Underskrifter
    Försäljning
    • CRM
    • Försäljning
    • Kassasystem Butik
    • Kassasystem Restaurang
    • Prenumerationer
    • Uthyrning
    Hemsida
    • Hemsidesverktyg
    • E-handel
    • Blogg
    • Forum
    • Livechatt
    • Utbildning
    Försörjningskedja
    • Lager
    • Produktion
    • Produktens livscykel (PLM)
    • Inköp
    • Underhåll
    • Kvalitet
    HR
    • Anställda
    • Rekrytering
    • Ledighet
    • Utvärderingar
    • Rekommendationer
    • Fordon
    Marknadsföring
    • Sociala medier
    • E-postmarknadsföring
    • Sms-marknadsföring
    • Evenemang
    • Automatiserad marknadsföring
    • Enkäter
    Tjänster
    • Projekt
    • Tidrapporter
    • Fältservice
    • Kundtjänst
    • Planering
    • Tidsbokningar
    Produktivitet
    • Diskutera
    • AI
    • IoT
    • VoIP
    • Kunskap
    • WhatsApp
    Community-appar Odoo Studio Odoo Cloud
  • Branscher
    Butiker
    • Bokaffärer
    • Klädbutiker
    • Möbelaffärer
    • Mataffärer
    • Byggvaruhus
    • Leksaksaffärer
    Restaurang & Hotell
    • Barer och pubar
    • Restauranger
    • Snabbmatsrestauranger
    • Gästhus
    • Dryckesdistributörer
    • Hotell
    Fastigheter
    • Fastighetsbyråer
    • Arkitektfirmor
    • Byggföretag
    • Fastighetsägare
    • Trädgårdsmästare
    • Bostadsrättsföreningar
    Hitta en konsult
    • Redovisningsbyrå
    • Odoo Partner
    • Reklambyråer
    • Advokatbyråer
    • Rekrytering
    • Revisioner och certifieringar
    Produktion
    • Textilproduktion
    • Metallproduktion
    • Möbelproduktion
    • Livsmedelsproduktion
    • Bryggerier
    • Företagsgåvor
    Hälsa och fitness
    • Sportklubbar
    • Optiker
    • Träningscenter
    • Friskvård
    • Apotek
    • Frisörsalonger
    Hantverk
    • Hantverkare
    • IT-utrustning och kundtjänst
    • Solceller, solpaneler och solenergi
    • Skomakare
    • Städföretag
    • VVS-tjänster
    Övrigt
    • Ideella föreningar
    • Miljöförvaltningar
    • Uthyrning av reklamtavlor
    • Fotografer
    • Cykeluthyrning
    • Återförsäljare av mjukvara
    Upptäck alla Branscher
  • Community
    Utbildning
    • Instruktionsvideor
    • Dokumentation
    • Certifiering
    • Utbildningar
    • Blogg
    • Podcast
    Lär dig med oss
    • Workshops
    • Företagsspelet Scale Up!
    • Studiebesök hos Odoo
    Mjukvaran
    • Ladda ner
    • Jämför utgåvor
    • Versionsinformation
    Samverkan
    • GitHub
    • Forum
    • Evenemang
    • Översättningar
    • Bli en partner
    • Partnertjänster
    • Registrera din redovisningsbyrå
    Våra tjänster
    • Partners
    • Revisorer
    • Träffa en rådgivare
    • Implementering
    • Kundrecensioner
    • Kundtjänst
    • Uppgraderingar
    GitHub Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Boka en demo
  • Priser
  • Hjälp
Du måste vara registrerad för att kunna interagera med communityn.
Alla inlägg Personer Utmärkelser
Etiketter (Visa alla)
odoo accounting v14 pos v15
Om detta forum
Du måste vara registrerad för att kunna interagera med communityn.
Alla inlägg Personer Utmärkelser
Etiketter (Visa alla)
odoo accounting v14 pos v15
Om detta forum
Hjälp

Custom functionality with One2many field

Prenumerera

Få ett meddelande när det finns aktivitet på detta inlägg

Denna fråga har flaggats
one2manyone2many_listv18CommunityEdition
1 Besvara
3107 Vyer
Avatar
SDSD, Shreya Doodipala
I want to bring the following custom functionality to my CRM.

I have created a new model called crm.presales.value, which has

lead_id = fields.Many2one('crm.lead', string="Opportunity")
user_id = fields.Many2one('res.users', string="User")
team_id = fields.Many2one('crm.team', string='Presales Team')
value = fields.Float()

among other fields and functions.

I have inherited the crm.lead model to include

presales_ids = fields.One2many('crm.presales.value', 'lead_id', string="Presales")
presales_team_ids = fields.Many2many('crm.team', string="Presales Teams",

compute='_compute_presales_team_ids', store=True)

In my crm.lead form view,

  • I want checkboxes to select presales teams.
  • When a team is selected, I want a separate inline list view to appear (for each team), which allows me to add the user and other required info.
  • When saving the form, if any list is empty I want that team to be unchecked.

How can I implement this dynamically? (using xml or qweb templates)


Odoo v18 Community edition

0
Avatar
Avbryt
Avatar
Tatvamasi Labs, Piyush H
Bästa svar

Dear Shreya,

Here's how to implement your custom presales team functionality without OWL directives:

Solution Approach

We'll use a combination of:

  1. Standard many2many_tags widget for team selection
  2. Conditional visibility for team sections
  3. Onchange methods to handle team toggling
  4. Server-side validation

Implementation Steps

1. Model Enhancements

python

# Add to your crm.lead model
from odoo import api, fields, models

class CrmLead(models.Model):
    _inherit = 'crm.lead'
    
    presales_team_ids = fields.Many2many(
        'crm.team', 
        string="Presales Teams",
        compute='_compute_presales_team_ids',
        store=True
    )
    
    @api.depends('presales_ids.team_id')
    def _compute_presales_team_ids(self):
        for lead in self:
            lead.presales_team_ids = lead.presales_ids.mapped('team_id')
2. Form View Implementation

xml

<record id="view_crm_lead_presales_form" model="ir.ui.view">
    <field name="name">crm.lead.form.presales</field>
    <field name="model">crm.lead</field>
    <field name="inherit_id" ref="crm.view_crm_lead_form"/>
    <field name="arch" type="xml">
        <!-- Add team selection field -->
        <xpath expr="//field[@name='team_id']" position="after">
            <field name="presales_team_ids" widget="many2many_tags"/>
        </xpath>
        
        <!-- Add dynamic sections for each team -->
        <xpath expr="//sheet" position="inside">
            <div class="oe_title">
                <h2>Presales Assignments</h2>
            </div>
            <div t-foreach="record.presales_team_ids.raw_value" t-as="team">
                <group string="Presales Team: {{ team[1] }}" attrs="{'invisible': [('id', '=', False)]}">
                    <field name="presales_ids" context="{'default_team_id': team[0]}">
                        <tree editable="bottom">
                            <field name="user_id"/>
                            <field name="value"/>
                            <field name="team_id" invisible="1"/>
                        </tree>
                    </field>
                </group>
            </div>
        </xpath>
    </field>
</record>
3. Add Validation Logic

python

# Add to your crm.lead model
@api.constrains('presales_ids', 'presales_team_ids')
def _check_presales_teams(self):
    for lead in self:
        # Get teams with no entries
        empty_teams = lead.presales_team_ids - lead.presales_ids.mapped('team_id')
        if empty_teams:
            lead.write({'presales_team_ids': [(3, team.id) for team in empty_teams]})
4. Optional: Add Onchange for Better UX

python

@api.onchange('presales_team_ids')
def _onchange_presales_teams(self):
    # Remove presales entries for deselected teams
    if self.presales_ids:
        to_remove = self.presales_ids.filtered(
            lambda x: x.team_id not in self.presales_team_ids
        )
        if to_remove:
            self.presales_ids = [(3, entry.id) for entry in to_remove]
Key Features of This Implementation
  1. Dynamic Team Sections: Only shows sections for selected teams
  2. Automatic Team Management: Teams are automatically (un)checked based on presales entries
  3. Contextual Defaults: New presales entries automatically get the correct team
  4. Validation: Empty teams are automatically unchecked on save
Limitations in Community Edition

Since OWL directives aren't allowed in XML:

  • We use t-foreach for dynamic sections
  • Visibility is controlled through standard attrs

The UI updates require a save/reload (not fully dynamic)

🚀 Did This Solve Your Problem?

If this answer helped you save time, money, or frustration, consider:

✅ Upvoting (👍) to help others find it faster

✅ Marking as "Best Answer" if it resolved your issue

Your feedback keeps the Odoo community strong! 💪

(Need further customization? Drop a comment—I’m happy to refine the solution!)

-1
Avatar
Avbryt
SDSD, Shreya Doodipala
Författare

OWL directives are not allowed in XML arch definitions

Tatvamasi Labs, Piyush H

Check now I have edited my answer

Njuter du av diskussionen? Läs inte bara, delta också!

Skapa ett konto idag för att ta del av exklusiva funktioner och engagera dig i vår fantastiska community!

Registrera dig
Relaterade inlägg Svar Vyer Verksamhet
Copy One2many fields information to another model Löst
one2many one2manyfield v18 CommunityEdition
Avatar
Avatar
Avatar
2
juni 25
2508
tree view for one2Many not populating
one2many one2many_list
Avatar
Avatar
2
okt. 20
4789
how get value from one2many field? Löst
one2many one2many_list
Avatar
Avatar
1
aug. 19
12302
Modify Pivot View
Pivot v18 CommunityEdition
Avatar
Avatar
1
juni 25
3608
Unable to send email notifications through write
notifications v18 CommunityEdition
Avatar
Avatar
1
juni 25
3447
Community
  • Instruktionsvideor
  • Dokumentation
  • Forum
Öppen källkod
  • Ladda ner
  • GitHub
  • Runbot
  • Översättningar
Tjänster
  • Odoo.sh Hosting
  • Kundtjänst
  • Uppgradera
  • Anpassningsbara modifikationer
  • Utbildning
  • Revisorer
  • Partners
  • Bli en partner
Om oss
  • Vårt företag
  • Varumärkestillgångar
  • Kontakta oss
  • Jobb
  • Evenemang
  • Podcast
  • Blogg
  • Kunder
  • Juridiskt • Integritet
  • Säkerhet
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk Slovenščina Español (América Latina) Español Svenska ภาษาไทย Türkçe українська Tiếng Việt

Odoo är ett affärssystem med öppen källkod som täcker alla dina företagsbehov: CRM, e-handel, bokföring, lager, kassasystem, projektledning, och så vidare.

Odoos unika värdeförslag är att samtidigt vara väldigt enkel att använda men också helt integrerad.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now