Skip to Content
Odoo Menú
  • Registra entrada
  • Prova-ho gratis
  • Aplicacions
    Finances
    • Comptabilitat
    • Facturació
    • Despeses
    • Full de càlcul (IA)
    • Documents
    • Signatura
    Vendes
    • CRM
    • Vendes
    • Punt de venda per a botigues
    • Punt de venda per a restaurants
    • Subscripcions
    • Lloguer
    Imatges de llocs web
    • Creació de llocs web
    • Comerç electrònic
    • Blog
    • Fòrum
    • Xat en directe
    • Aprenentatge en línia
    Cadena de subministrament
    • Inventari
    • Fabricació
    • PLM
    • Compres
    • Manteniment
    • Qualitat
    Recursos humans
    • Empleats
    • Reclutament
    • Absències
    • Avaluacions
    • Recomanacions
    • Flota
    Màrqueting
    • Màrqueting Social
    • Màrqueting per correu electrònic
    • Màrqueting per SMS
    • Esdeveniments
    • Automatització del màrqueting
    • Enquestes
    Serveis
    • Projectes
    • Fulls d'hores
    • Servei de camp
    • Suport
    • Planificació
    • Cites
    Productivitat
    • Converses
    • Validacions
    • IoT
    • VoIP
    • Coneixements
    • WhatsApp
    Aplicacions de tercers Odoo Studio Plataforma d'Odoo al núvol
  • Sectors
    Comerç al detall
    • Llibreria
    • Botiga de roba
    • Botiga de mobles
    • Botiga d'ultramarins
    • Ferreteria
    • Botiga de joguines
    Food & Hospitality
    • Bar i pub
    • Restaurant
    • Menjar ràpid
    • Guest House
    • Distribuïdor de begudes
    • Hotel
    Immobiliari
    • Agència immobiliària
    • Estudi d'arquitectura
    • Construcció
    • Gestió immobiliària
    • Jardineria
    • Associació de propietaris de béns immobles
    Consultoria
    • Empresa comptable
    • Partner d'Odoo
    • Agència de màrqueting
    • Bufet d'advocats
    • Captació de talent
    • Auditoria i certificació
    Fabricació
    • Textile
    • Metal
    • Mobles
    • Menjar
    • Brewery
    • Regals corporatius
    Salut i fitness
    • Club d'esport
    • Òptica
    • Centre de fitness
    • Especialistes en benestar
    • Farmàcia
    • Perruqueria
    Trades
    • Servei de manteniment
    • Hardware i suport informàtic
    • Sistemes d'energia solar
    • Shoe Maker
    • Serveis de neteja
    • Instal·lacions HVAC
    Altres
    • Nonprofit Organization
    • Agència del medi ambient
    • Lloguer de panells publicitaris
    • Fotografia
    • Lloguer de bicicletes
    • Distribuïdors de programari
    Browse all Industries
  • Comunitat
    Aprèn
    • Tutorials
    • Documentació
    • Certificacions
    • Formació
    • Blog
    • Pòdcast
    Potenciar l'educació
    • Programa educatiu
    • Scale-Up! El joc empresarial
    • Visita Odoo
    Obtindre el programari
    • Descarregar
    • Comparar edicions
    • Novetats de les versions
    Col·laborar
    • GitHub
    • Fòrum
    • Esdeveniments
    • Traduccions
    • Converteix-te en partner
    • Services for Partners
    • Registra la teva empresa comptable
    Obtindre els serveis
    • Troba un partner
    • Troba un comptable
    • Contacta amb un expert
    • Serveis d'implementació
    • Referències del client
    • Suport
    • Actualitzacions
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Programar una demo
  • Preus
  • Ajuda

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

  • CRM
  • e-Commerce
  • Comptabilitat
  • Inventari
  • PoS
  • Projectes
  • MRP
All apps
You need to be registered to interact with the community.
All Posts People Badges
Etiquetes (View all)
odoo accounting v14 pos v15
About this forum
You need to be registered to interact with the community.
All Posts People Badges
Etiquetes (View all)
odoo accounting v14 pos v15
About this forum
Ajuda

Domain does not change when radio button selected changes

Subscriure's

Get notified when there's activity on this post

This question has been flagged
databasedomain_filterformaodoo v17
2 Respostes
1564 Vistes
Avatar
Sonny

I need to change the values in the dropdown list when a radio button is changed. If direction is 'Export', the Shipper list should be from the Philippines, likewise, the Consignee list should not be from the Philippines.

This is in my model which declares the variables

direction = fields.Selection(([('import', 'Import'), ('export', 'Export')]), string='Direction')
shipper_id = fields.Many2one('res.partner', 'Shipper', domain=[('shipper', '=', True)])
consignee_id = fields.Many2one('res.partner', 'Consignee', domain= [('consignee', '=', True)])

This is in a code snippet of the XML view

<div class="oe_title mb24"> 
   <h1>
      <field class="text-break" name="name" default_focus="1" readonly="1"/>
   </h1>
   <h3>
      <field name=" direction" widget="radio" required="1" options="{'horizontal': true}"/>
   </h3>
</div>
<group>
   <group string="Transporter">
      <field name="shipper_id " required="1"/>
      <field name="shipper_identifier"/>
   </group>
   <group string="Customer">
      <field name="consignee_id" required="1"/>
      <field name="consignee_identifier"/>
   </group>
</group>

I added this in the model to change the domain

@api.onchange('direction') 
def _onchange_direction(self):
    philippines_id = 176
    domain = {}
    if self.direction == 'export':
        self.shipper_id = False
        self.consignee_id = False
        domain = {
           'shipper_id': [ ('shipper', '=', True), ('country_id', '=', philippines_id)],
           'consignee_id': [('consignee', '=', True), ('country_id', '!=', philippines_id)],
        }
    else:
       self.shipper_id = False
       self.consignee_id = False
       domain = {
           'shipper_id': [('shipper', '=' , True)],
           'consignee_id': [('consignee', '=', True)],
       }
    _logger.info('Freight domain: %s', domain)
    return {'domain': domain}

When if I test it, based on the logs, it is printing the domain correctly. However nothing changes on the list in UI. Checking using the Developer, the domain is still the same, i.e. only [('shipper','=',True)]


When, I put it in the XML view directly the domain, the list will be correct.

<field name="shipper_id" required="1" domain="[('shipper', '=', True), ('country_id', '=', 176)]"/> 
<field name="consignee_id" required="1" domain="[('consignee', '=', True), ('country_id', '!=', 176)]"/>


However, when I changed the direction, the list is the same, the domain did not changed. Meaning whatever is defined in the view, it will be stay like that even though the onchange is listened correctly. Even though there is a function being called, it was not applied. How can I fix that? I am using Odoo 17


0
Avatar
Descartar
Avatar
Sonny
Autor Best Answer

I cannot comment yet on Cybrosys Techno's answer so I will put my comment here based on their solution:

It has errors

Traceback (most recent call last): │ 
│ File "/home/odoo/src/odoo/odoo/ http.py ", line 2207, in __call__ │
│ response = request._serve_db() │
│ File "/home/odoo /src/odoo/ odoo / http.py ", line 1783, in _serve_db │
│ return service_model.retrying(self._serve_ir_http, self.env)
File "/home/odoo/src/odoo/odoo/service/ model.py ", line 133, in retrying │
│ result = func() │
│ File "/home/odoo/src/odoo/odoo/ http.py " , line 1810, in _serve_ir_http │
│ response = self.dispatcher.dispatch(rule.endpoint, args) │
│ File "/home/odoo/src/odoo/odoo/ http.py ", line 2014, in dispatch │
│ result = self.request.registry['ir.http']._dispatch(endpoint) │
│ File "/home/ odoo/src/odoo/addons/website/models/ ir_http.py ", line 235, in _dispatch │
│ response = super()._dispatch(endpoint) │
│ File "/home/odoo/src/odoo/odoo/addons/base/models/ ir_http.py ", line 221, in _dispatch │
│ result = endpoint(** request.params) │
│ File "/home/odoo/src /odoo/odoo/ http.py ", line 757, in route_wrapper │
│ result = endpoint(self, *args, **params_ok) │
│ File "/home/odoo/src/odoo/addons/web/controllers/ dataset.py ", line 24, in call_kw │
│ return self._call_kw(model, method, args, kwargs ) │
│ File "/home/odoo/ src/odoo/addons/web/controllers/ dataset.py ", line 20, in _call_kw │
│ return call_kw(request.env[model], method, args, kwargs) │
│ File "/home/odoo/src/odoo/odoo/ api.py ", line 468, in call_kw │
│ result = _call_kw_multi(method, model, args, kwargs) │ │ File "
/home/ odoo/src/odoo/odoo/api.py", line 453, in _call_kw_multi │
│ result = method(recs, *args, **kwargs) │
│ File "/home/odoo/src/odoo/addons/web/models/ models.py ", line 1081, in onchange │
│ snapshot1 = RecordSnapshot(record, fields_spec) │
│ File "/home/odoo/src/ odoo/addons/web/models/ models.py ", line 1168, in __init__ │
│ self.fetch(name) │
│ File "/home/odoo/src/odoo/addons/web/models/ models.py ", line 1183, in fetch │
│ self[field_name] = self .record[field_name] │
│ File "/home/odoo/src/ odoo/odoo/ models.py ", line 6669, in __getitem__ │
│ return self._fields[key].__get__(self, self.env.registry[self._name]) │
│ File "/home/odoo/src/odoo/odoo/ fields.py ", line 2907,in __get__ │
│ return super().__get__(records, owner) │
│ File "/home/odoo/src/odoo/odoo/ fields.py ", line 1207, in __get__ │
│ self.compute_value(recs) │
│ File "/ home/odoo/src/odoo/odoo/ fields.py ", line 1389, in compute_value │
│ records._compute_field_value(self) │
│ File "/home/odoo/src/odoo/addons/mail/models/ mail_thread.py ", line 424, in _compute_field_value │
│ return super()._compute_field_value(field) │
│ File "/home/odoo/src/odoo/ odoo/ models.py ", line 4913, in _compute_field_value │
│ fields.determine(field.compute, self) │
│ File "/home/odoo/src/odoo/odoo/ fields.py ", line 102, in determine │ │
return needle(*args) │
│ File "/home/odoo/src/user/addons/ tk_freight/models/ freight_shipment .py", line 460, in _compute_filtered_shipper_id │
│ record.filtered_shipper_id = self.env['res.partner'].search( │ │
File "/home/odoo/src/odoo/odoo/ fields.py ", line 1302, in __set__ │
│ self.write(protected_records, value) │ │
File "/home/odoo/src/odoo/odoo/ fields.py ", line 3142, in write │
│ cache_value = self.convert_to_cache(value, records) │
│ File "/home/odoo/src/odoo/odoo/ fields.py ", line 3067, in convert_to_cache │
│ raise ValueError(" Wrong value for %s: %r" % (self, value)) │
│ValueError: Wrong value for freight.shipment.filtered_shipper_id: res.partner(702, 706, 707, 709, 712, 809, 811, 715, 716, 718, 719, 720, 721, 722, 723, 724, 725, 820,
0
Avatar
Descartar
Avatar
Cybrosys Techno Solutions Pvt.Ltd
Best Answer

Hi,

You can create two additional Many2one fields for both the shipper and consignee with computed domains based on the direction field.

PYTHON

   direction = fields.Selection(

        [('import', 'Import'), ('export', 'Export')],

        string='Direction',

        required=True

    )

    shipper_id = fields.Many2one(

        'res.partner',

        string='Shipper',

        required=True,

        domain="[('shipper', '=', True)]"

    )

    filtered_shipper_id = fields.Many2one(

        'res.partner',

        string='Filtered Shipper',

        compute='_compute_filtered_shipper_id',

        store=False

    )

    consignee_id = fields.Many2one(

        'res.partner',

        string='Consignee',

        required=True,

        domain="[('consignee', '=', True)]"

    )

    filtered_consignee_id = fields.Many2one(

        'res.partner',

        string='Filtered Consignee',

        compute='_compute_filtered_consignee_id',

        store=False

    )


    @api.depends('direction')

    def _compute_filtered_shipper_id(self):

        philippines_id = self.env.ref('base.ph').id  # Replace with the correct Philippines country ID

        for record in self:

            if record.direction == 'export':

                record.filtered_shipper_id = self.env['res.partner'].search(

                    [('shipper', '=', True), ('country_id', '=', philippines_id)]

                )

            else:

                record.filtered_shipper_id = self.env['res.partner'].search(

                    [('shipper', '=', True)]

                )


    @api.depends('direction')

    def _compute_filtered_consignee_id(self):

        philippines_id = self.env.ref('base.ph').id  # Replace with the correct Philippines country ID

        for record in self:

            if record.direction == 'export':

                record.filtered_consignee_id = self.env['res.partner'].search(

                    [('consignee', '=', True), ('country_id', '!=', philippines_id)]

                )

            else:

                record.filtered_consignee_id = self.env['res.partner'].search(

                    [('consignee', '=', True)]

                )

XML

<form string="Freight Record">

        <sheet>

         <group>

             <field name="direction" widget="radio" options="{'horizontal': true}" required="1"/

          </group>

           <group>

                <field name="shipper_id" invisible="1"/>

                 <field name="filtered_shipper_id" required="1" domain="[]"/>

            </group>

              <group>

                      <field name="consignee_id" invisible="1"/>

                              <field name="filtered_consignee_id" required="1" domain="[]"/>

               </group>

            </sheet>

</form>


Hope it helps

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

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

Registrar-se
Related Posts Respostes Vistes Activitat
Different domains for different databases?
domain database domain_filter
Avatar
Avatar
Avatar
2
d’oct. 18
9066
Accept & Pay button in quotation emails - can I change the style / look / design? Solved
odoo v17
Avatar
Avatar
1
d’oct. 25
698
Database disappeared from list after activating Google Oauth for administrator
database
Avatar
0
de jul. 25
2404
Setup Odoo with specific database
database
Avatar
Avatar
2
de nov. 24
8846
database locked
database
Avatar
Avatar
Avatar
2
d’oct. 24
5202
Community
  • Tutorials
  • Documentació
  • Fòrum
Codi obert
  • Descarregar
  • GitHub
  • Runbot
  • Traduccions
Serveis
  • Allotjament a Odoo.sh
  • Suport
  • Actualització
  • Desenvolupaments personalitzats
  • Educació
  • Troba un comptable
  • Troba un partner
  • Converteix-te en partner
Sobre nosaltres
  • La nostra empresa
  • Actius de marca
  • Contacta amb nosaltres
  • Llocs de treball
  • Esdeveniments
  • Pòdcast
  • Blog
  • Clients
  • Informació legal • Privacitat
  • Seguretat
الْعَرَبيّة 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 és un conjunt d'aplicacions empresarials de codi obert que cobreix totes les necessitats de la teva empresa: CRM, comerç electrònic, comptabilitat, inventari, punt de venda, gestió de projectes, etc.

La proposta única de valor d'Odoo és ser molt fàcil d'utilitzar i estar totalment integrat, ambdues alhora.

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