Skip to Content
Odoo Меню
  • Увійти
  • Спробуйте це безкоштовно
  • Додатки
    Фінанси
    • Бухоблік
    • Виставлення рахунку
    • Витрати
    • Електронні таблиці (BI)
    • Документи
    • Підпис
    Продажі
    • CRM
    • Продажі
    • POS Магазин
    • POS Ресторан
    • Підписки
    • Оренда
    Веб-сайти
    • Конструктор веб-сайту
    • Електронна комерція
    • Блог
    • Форум
    • Живий чат
    • Електронне навчання
    Ланцюг поставок
    • Склад
    • Виробництво
    • PLM
    • Купівлі
    • Технічне обслуговування
    • Якість
    Кадри
    • Співробітники
    • Рекрутинг
    • Відпустки
    • Оцінювання
    • Рекомендації
    • Автотранспорт
    Маркетинг
    • Маркетинг соцмереж
    • Email-маркетинг
    • SMS-маркетинг
    • Події
    • Автом. маркетингу
    • Опитування
    Послуги
    • Проект
    • Табелі
    • Виїзне обслуговування
    • Служба підтримки
    • Планування
    • Призначення
    Продуктивність
    • Обговорення
    • Схвалення
    • IoT
    • IP-телефонія
    • База знань
    • WhatsApp
    Сторонні модулі Odoo Studio Платформа Odoo Cloud
  • Сфери
    Роздрібна торгівля
    • Книжковий магазин
    • Магазин одягу
    • Магазин меблів
    • Продуктовий магазин
    • Магазин будівельних матеріалів
    • Магазин іграшок
    Food & Hospitality
    • Бар та паб
    • Ресторан
    • Фастфуд
    • Guest House
    • Дистриб'ютор напоїв
    • Hotel
    Нерухомість
    • Real Estate Agency
    • Архітектурна фірма
    • Будівництво
    • Управління нерухомістю
    • Садівництво
    • Асоціація власників нерухомості
    Консалтинг
    • Бухгалтерська компанія
    • Партнер Odoo
    • Агенція маркетингу
    • Юридична фірма
    • Придбання Талантів
    • Аудит та сертифікація
    Виробництво
    • Textile
    • Metal
    • Меблі
    • Їжа
    • Brewery
    • Корпоративні подарунки
    Здоров'я & Фітнес
    • Спортивний клуб
    • Оптика
    • Фітнес-центр
    • Практики здоров'я
    • Аптека
    • Салон краси
    Trades
    • Ремонтник
    • IT-обладнання та Підтримка
    • Системи сонячної енергії
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Інші
    • Nonprofit Organization
    • Екологічна агенція
    • Оренда білбордів
    • Фотографія
    • Лізинг велосипедів
    • Реселлер програмного забезпечення
    Browse all Industries
  • Спільнота
    Навчання
    • Навчальний посібник
    • Документація
    • Сертифікації
    • Тренування
    • Блог
    • Подкаст
    Сприяйте Освіті
    • Програма навчання
    • Бізнес гра Scale Up!
    • Відвідайте Odoo
    Отримайте програмне забезпечення
    • Завантаження
    • Порівняйте версії
    • Релізи
    Співпрацюйте
    • Github
    • Форум
    • Події
    • Переклади
    • Стати партнером
    • Services for Partners
    • Зареєструйте вашу бухгалтерську фірму
    Отримайте послуги
    • Знайдіть партнера
    • Знайдіть бухгалтера
    • Зустріньтеся з консультантом
    • Послуги з впровадження
    • Референси клієнтів
    • Підтримка
    • Оновлення
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Отримати демо
  • Ціни
  • Допомога

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

  • CRM
  • e-Commerce
  • Бухоблік
  • Склад
  • PoS
  • Проект
  • MRP
All apps
Вам необхідно зареєструватися, щоб взаємодіяти зі спільнотою.
All Posts Люди Значки
Мітки (View all)
odoo accounting v14 pos v15
Про цей форум
Вам необхідно зареєструватися, щоб взаємодіяти зі спільнотою.
All Posts Люди Значки
Мітки (View all)
odoo accounting v14 pos v15
Про цей форум
Допомога

Domain does not change when radio button selected changes

Підписатися

Отримуйте сповіщення про активність щодо цієї публікації

Це запитання позначене
databasedomain_filterformaodoo v17
2 Відповіді
1563 Переглядів
Аватар
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
Аватар
Відмінити
Аватар
Sonny
Автор Найкраща відповідь

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
Аватар
Відмінити
Аватар
Cybrosys Techno Solutions Pvt.Ltd
Найкраща відповідь

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
Аватар
Відмінити
Enjoying the discussion? Don't just read, join in!

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

Реєстрація
Related Posts Відповіді Переглядів Дія
Different domains for different databases?
domain database domain_filter
Аватар
Аватар
Аватар
2
жовт. 18
9064
Accept & Pay button in quotation emails - can I change the style / look / design? Вирішено
odoo v17
Аватар
Аватар
1
жовт. 25
696
Database disappeared from list after activating Google Oauth for administrator
database
Аватар
0
лип. 25
2403
Setup Odoo with specific database
database
Аватар
Аватар
2
лист. 24
8838
database locked
database
Аватар
Аватар
Аватар
2
жовт. 24
5199
Спільнота
  • Навчальний посібник
  • Документація
  • Форум
Open Source
  • Завантаження
  • Github
  • Runbot
  • Переклади
Послуги
  • Хостинг Odoo.sh
  • Підтримка
  • Оновлення
  • Кастомні доробки
  • Навчання
  • Знайдіть бухгалтера
  • Знайдіть партнера
  • Стати партнером
Про нас
  • Наша компанія
  • Торгові активи
  • Зв'яжіться з нами
  • Вакансії
  • Події
  • Подкаст
  • Блог
  • Клієнти
  • Юридичні документи • Конфіденційність
  • Безпека
الْعَرَبيّة 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 - це набір програм для роботи з відкритим кодом, які охоплюють всі ваші потреби компанії: CRM, електронна комерція, бухгалтерський облік, склад, точка продажу, управління проектами тощо.

Унікальна пропозиція Odoo - це одночасно дуже проста у використанні та повністю інтегрована.

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