Skip to Content
Odoo Menu
  • Log ind
  • Prøv gratis
  • Apps
    Økonomi
    • Bogføring
    • Fakturering
    • Udgifter
    • Regneark (BI)
    • Dokumenter
    • e-Signatur
    Salg
    • CRM
    • Salg
    • POS Butik
    • POS Restaurant
    • Abonnementer
    • Udlejning
    Hjemmeside
    • Hjemmesidebygger
    • e-Handel
    • Blog
    • Forum
    • LiveChat
    • e-Læring
    Forsyningskæde
    • Lagerbeholdning
    • Produktion
    • PLM
    • Indkøb
    • Vedligeholdelse
    • Kvalitet
    HR
    • Medarbejdere
    • Rekruttering
    • Fravær
    • Medarbejdersamtaler
    • Anbefalinger
    • Flåde
    Marketing
    • Markedsføring på sociale medier
    • E-mailmarketing
    • SMS-marketing
    • Arrangementer
    • Automatiseret marketing
    • Spørgeundersøgelser
    Tjenester
    • Projekt
    • Timesedler
    • Udkørende Service
    • Kundeservice
    • Planlægning
    • Aftaler
    Produktivitet
    • Dialog
    • Godkendelser
    • IoT
    • VoIP
    • Vidensdeling
    • WhatsApp
    Tredjepartsapps Odoo Studio Odoo Cloud-platform
  • Brancher
    Detailhandel
    • Boghandel
    • Tøjforretning
    • Møbelforretning
    • Dagligvarebutik
    • Byggemarked
    • Legetøjsforretning
    Mad og værtsskab
    • Bar og pub
    • Restaurant
    • Fastfood
    • Gæstehus
    • Drikkevareforhandler
    • Hotel
    Ejendom
    • Ejendomsmægler
    • Arkitektfirma
    • Byggeri
    • Ejendomsadministration
    • Havearbejde
    • Boligejerforening
    Rådgivning
    • Regnskabsfirma
    • Odoo-partner
    • Marketingbureau
    • Advokatfirma
    • Rekruttering
    • Audit & certificering
    Produktion
    • Tekstil
    • Metal
    • Møbler
    • Fødevareproduktion
    • Bryggeri
    • Firmagave
    Heldbred & Fitness
    • Sportsklub
    • Optiker
    • Fitnesscenter
    • Kosmetolog
    • Apotek
    • Frisør
    Håndværk
    • Handyman
    • IT-hardware og support
    • Solenergisystemer
    • Skomager
    • Rengøringsservicer
    • VVS- og ventilationsservice
    Andet
    • Nonprofitorganisation
    • Miljøagentur
    • Udlejning af billboards
    • Fotografi
    • Cykeludlejning
    • Softwareforhandler
    Gennemse alle brancher
  • Community
    Få mere at vide
    • Tutorials
    • Dokumentation
    • Certificeringer
    • Oplæring
    • Blog
    • Podcast
    Bliv klogere
    • Udannelselsesprogram
    • Scale Up!-virksomhedsspillet
    • Besøg Odoo
    Få softwaren
    • Download
    • Sammenlign versioner
    • Udgaver
    Samarbejde
    • Github
    • Forum
    • Arrangementer
    • Oversættelser
    • Bliv partner
    • Tjenester til partnere
    • Registrér dit regnskabsfirma
    Modtag tjenester
    • Find en partner
    • Find en bogholder
    • Kontakt en rådgiver
    • Implementeringstjenester
    • Kundereferencer
    • Support
    • Opgraderinger
    Github Youtube Twitter LinkedIn Instagram Facebook Spotify
    +1 (650) 691-3277
    Få en demo
  • Prissætning
  • Hjælp

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Bogføring
  • Lager
  • PoS
  • Projekt
  • MRP
All apps
Du skal være registreret for at interagere med fællesskabet.
All Posts People Emblemer
Tags (View all)
odoo accounting v14 pos v15
Om dette forum
Du skal være registreret for at interagere med fællesskabet.
All Posts People Emblemer
Tags (View all)
odoo accounting v14 pos v15
Om dette forum
Hjælp

How to set this specific domain in XML?

Tilmeld

Få besked, når der er aktivitet på dette indlæg

Dette spørgsmål er blevet anmeldt
domainxmlmany2oneodoo8.0
3 Besvarelser
39869 Visninger
Avatar
Juan Formoso Vasco

I have the next table in Odoo, named relationship, which comes from the relation between the table girl and the table boy:

girl_id
boy_id
relationship_type
1
2
friends
1
3
siblings
2
7
lovers

So:

  • In the table girl there's a field relationships which is a one2many pointing to the table relationship.

  • In the table boy there's a field relationships which is a one2many pointing to the table relationship.

  • In the table relationship there are two fields, girl_id and boy_id, both pointing to the tables girl and boy respectively.

Scenario:

In the forms of girl and boy there's the field relationships. When I add a new relationship for a girl or a boy, a form is opened to fill in the fields of the table relationship (girl_id, boy_id and relationship_type). Imagine I'm in the form of a girl, I click on add a new relationship and the form is opened. I implemented this in order not to see the girl_id (it's invisible but it contains the ID of the current girl). So I can see only two fields (boy_id and relationship_type).

What I want:

Keeping on with the example, if I open the dropdown of boy_id, I'll see all boys, even the ones who are already related to this girl, and that's what I don't want. For example, if I'm adding a relationship to the girl with id 1, I must not see boys with ids 2 and 3, if the girl is the one with id 2, I must not see the boy with id 7.

My code:

<field name="girl_id" invisible="1"/>
<field name="boy_id" domain="[('id', 'not in', girl_id.relationships.boy_id)]"/> <!-- Obviously this does not work -->
<field name="relationship_type"/>

Can anyone help me, please? Thank you!

4
Avatar
Kassér
Temur

1) wrong domain, it should not work... 2) why do not use many2many relations between girl and boy? many2many relation seems more convenient to use in your scenario and all this packet of technical problems will disappear with it

Juan Formoso Vasco
Forfatter

Because it's my understanding that it's not possible to store more fields than the IDs in a many2many relationship, is it?

Avatar
Temur
Bedste svar

you can use relation many2many...

use in girl's model:

relationships = fields.Many2many(comodel_name="boy.model.name", relation='relation_table_name', column1='boy_id', column2='girl_id', string="relationships of this girl")


use in boy's model:

relationships = fields.Many2many(comodel_name="girl.model.name", relation='relation_table_name', column1='girl_id', column2='boy_id', string="relationships of this boy")


note that in both cases relation table is the same ( relation='relation_table_name' )

but column1 and column2 are inversed (in case of girl column1='boy_id' and column2='girl_id' but in case of boy column1='girl_id' and column2='boy_id'


UPDATE:

 apart of this two models, you can add new model and force it to have same table name as the relation table (using _table field):

_table = "relation_table_name"

and add the two fields representing ids:

boy_id = fields.Many2one(comodel_name="boy.model.name", string="Boy's ID")

girl_id = fields.Many2one(comodel_name="girl.model.name", string="Girl's ID")

also additional fields you like, as:

relationship_type = fields.Selection(....         (or fields.Char(... or something else...)

... 

you can find useful the last model.


OR


you can try to correct your domain as follows:

<field name="boy_id" domain="[('id', 'not in', the_computed_one2many_field )]"/>

add "the_computed_one2many_field" computed field and add it as invisible to the view.

the 'compute' function of "the_computed_one2many_field" must return list of ids...


probably the_computed_one2many_field may be also related field to girl_id.relationships.boy_id (not computed one)

0
Avatar
Kassér
Juan Formoso Vasco
Forfatter

Thank you for your help @Temur, but I think that way a boy will have the same relationship with every girl and the other way around. Let's imagine that I create the relationship_type on the table boy: when I create a boy, I will have to set the relationship type of that boy? And that boy will always have that relationship type!

Temur

yes, I see. I updated the answer. it's more complicated then I thought.

Juan Formoso Vasco
Forfatter

Thank you @Temur, I thought the last suggestion (after the OR) was the best and would work, but I get the RuntimeError: maximum recursion depth exceeded while calling a Python object, because there's a model with a one2many pointing to other model which also has a one2many pointing to the first one.

Temur

you tried to add computed field or related field?

Temur

lets say we're adding the computed field to girls model, then

@api.depends('girl_id')
def _compute_boys(self):
   #... implement the function

girls_relations = fields.One2many(comodel_name="boys.model.name", compute='_compute_boys')
for @api.depends I just guess, adapt it to your model. then use in xml:
<field name="boy_id" domain="[('id', 'not in', girls_relations )]"/>
and you'll need same for boy's relations...
Temur

probably @api.depends('relationships') and not girl_id ? I don't know your model structure

Enjoying the discussion? Don't just read, join in!

Create an account today to enjoy exclusive features and engage with our awesome community!

Tilmeld dig
Related Posts Besvarelser Visninger Aktivitet
[SOLVED] Is posible change a domain_force in security.xml through a function in Python? (odoo 8) Løst
security domain xml odoo8.0
Avatar
Avatar
2
mar. 15
10925
Domain with inherited field Løst
domain many2one
Avatar
1
okt. 22
4531
How to get the current user in XML
domain xml
Avatar
Avatar
Avatar
2
nov. 25
9975
Many2one field: 'id' instead of 'name' Løst
many2one odoo8.0
Avatar
Avatar
1
feb. 21
5616
Showing many2one fields in other modules Løst
xml many2one
Avatar
Avatar
Avatar
2
feb. 18
13073
Community
  • Tutorials
  • Dokumentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Oversættelser
Tjenester
  • Odoo.sh-hosting
  • Support
  • Opgradere
  • Individuelt tilpasset udvikling
  • Uddannelse
  • Find en bogholder
  • Find en partner
  • Bliv partner
Om os
  • Vores virksomhed
  • Brandaktiver
  • Kontakt os
  • Stillinger
  • Arrangementer
  • Podcast
  • Blog
  • Kunder
  • Juridiske dokumenter • Privatlivspolitik
  • Sikkerhedspolitik
الْعَرَبيّة 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 ภาษาไทย Türkçe українська Tiếng Việt

Odoo er en samling open source-forretningsapps, der dækker alle dine virksomhedsbehov – lige fra CRM, e-handel og bogføring til lagerstyring, POS, projektledelse og meget mere.

Det unikke ved Odoo er, at systemet både er brugervenligt og fuldt integreret.

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