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
Про цей форум
Допомога

How to add radio button widget

Підписатися

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

Це запитання позначене
10 Відповіді
67657 Переглядів
Аватар
faizan

as we cant add radio btn directly . in several post i saw it can be addd by widget so how and where i can add radio widget

2
Аватар
Відмінити
Sehrish

See this: http://learnopenerp.blogspot.com/2020/05/show-one2many-field-records-as-radio-button-in-odoo-wizard.html

Аватар
Serpent Consulting Services Pvt. Ltd.
Найкраща відповідь

Hello Faizan,

There is no radio button widget available in v7.

You can get only drop down widget for both selection and many2one fields. However, in v8, there will be a new radio button widget that can be used in view using widget="radio" attribute.

The new radio widget is available now in trunk branch.

Thank you.

4
Аватар
Відмінити
Аватар
joseph d'souza
Найкраща відповідь

There is no radio button widget in v7, but you can add it using widget="radio" attribute.

First you create your own widget [like selection widget] then add python code and XML code like below:

Python Code :

 'syllabus': fields.selection([('one','One'),('two','Two')],'Syllabus'),

XML Code :

<field name="syllabus" widget="radio"/>

Hope It Helps You More !!!

Thanks !

8
Аватар
Відмінити
Mohammad Alhashash

I think you mean this is possible only in v8.0 which is not released yet.

Аватар
George
Найкраща відповідь

Create Sample module web_widget_radio

1) Required files

   __init__.py
   __openerp__.py
   static/src/js/widget_radio.js
   static/src/xml/widget_radio.xml

2) Add following in __openerp__.py

'js': ['static/src/js/widget_radio.js'],
'qweb': ['static/src/xml/widget_radio.xml'],

3) Add following code in static/src/xml/widget_radio.xml

<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="FieldRadio">
    <span t-attf-class="oe_form_field oe_form_field_radio #{widget.options.horizontal ? 'oe_horizontal' : 'oe_vertical'}" t-att-style="widget.node.attrs.style">
        <span t-if="!widget.get('effective_readonly')">
            <t t-if="widget.options.horizontal">
                <t t-set="width" t-value="Math.floor(100 / widget.selection.length)"/>
                <t t-if="!widget.options.no_radiolabel">
                    <t t-foreach="widget.selection" t-as="selection">
                        <label t-att-for="widget.uniqueId + '_' + selection[0]" t-att-style="'width: ' + width + '%;'"><t t-esc="selection[1]"/></label>
                    </t>
                    <br/>
                </t>
                <t t-foreach="widget.selection" t-as="selection">
                    <div t-att-style="'width: ' + width + '%;'">
                        <span class="oe_radio_input"><input type="radio" t-att-name="widget.uniqueId" t-att-id="widget.uniqueId + '_' + selection[0]" t-att-value="selection[0]"/></span>
                    </div>
                </t>
            </t>
            <t t-if="!widget.options.horizontal">
             <html>
                <tr>
                   <t t-foreach="widget.selection" t-as="selection">
                        <span class="oe_radio_input"><input type="radio" t-att-id="widget.uniqueId + '_' + selection[0]" t-att-name="widget.uniqueId" t-att-value="selection[0]"/></span><label t-if="!widget.options.no_radiolabel" t-att-for="widget.uniqueId + '_' + selection[0]"><t t-esc="selection[1]"/></label>
                    </t>
                </tr>
             </html>

            </t>
        </span>
        <span t-if="widget.get('effective_readonly')" class="oe_radio_readonly"><t t-esc="widget.get('value')[1]"/></span>
    </span>
</t>
</templates>

4) Add following code in static/src/js/widget_radio.js

openerp.web_widget_radio = function (instance)
{
    instance.web.form.widgets.add('radio', 'instance.web_widget_radio.FieldRadio');
    instance.web_widget_radio.FieldRadio = instance.web.form.AbstractField.extend(instance.web.form.ReinitializeFieldMixin, {
        template: 'FieldRadio',
        events: {
            'click input': 'click_change_value'
        },
        init: function(field_manager, node) {
            /* Radio button widget: Attributes options:
            * - "horizontal" to display in column
            * - "no_radiolabel" don't display text values
            */
            this._super(field_manager, node);
            this.selection = _.clone(this.field.selection) || [];
            this.domain = false;
        },
        initialize_content: function () {
            this.uniqueId = _.uniqueId("radio");
            this.on("change:effective_readonly", this, this.render_value);
            this.field_manager.on("view_content_has_changed", this, this.get_selection);
            this.get_selection();
        },
        click_change_value: function (event) {
            var val = $(event.target).val();
            val = this.field.type == "selection" ? val : +val;
            if (val == this.get_value()) {
                this.set_value(false);
            } else {
                this.set_value(val);
            }
        },
        /** Get the selection and render it
         *  selection: [[identifier, value_to_display], ...]
         *  For selection fields: this is directly given by this.field.selection
         *  For many2one fields:  perform a search on the relation of the many2one field
         */
        get_selection: function() {
            var self = this;
            var selection = [];
            var def = $.Deferred();
            if (self.field.type == "many2one") {
                var domain = instance.web.pyeval.eval('domain', this.build_domain()) || [];
                if (! _.isEqual(self.domain, domain)) {
                    self.domain = domain;
                    var ds = new instance.web.DataSetStatic(self, self.field.relation, self.build_context());
                    ds.call('search', [self.domain])
                        .then(function (records) {
                            ds.name_get(records).then(function (records) {
                                selection = records;
                                def.resolve();
                            });
                        });
                } else {
                    selection = self.selection;
                    def.resolve();
                }
            }
            else if (self.field.type == "selection") {
                selection = self.field.selection || [];
                def.resolve();
            }
            return def.then(function () {
                if (! _.isEqual(selection, self.selection)) {
                    self.selection = _.clone(selection);
                    self.renderElement();
                    self.render_value();
                }
            });
        },
        set_value: function (value_) {
            if (value_) {
                if (this.field.type == "selection") {
                    value_ = _.find(this.field.selection, function (sel) { return sel[0] == value_;});
                }
                else if (!this.selection.length) {
                    this.selection = [value_];
                }
            }
            this._super(value_);
        },
        get_value: function () {
            var value = this.get('value');
            return value instanceof Array ? value[0] : value;
        },
        render_value: function () {
            var self = this;
            this.$el.toggleClass("oe_readonly", this.get('effective_readonly'));
            this.$("input:checked").prop("checked", false);
            if (this.get_value()) {
                this.$("input").filter(function () {return this.value == self.get_value();}).prop("checked", true);
                this.$(".oe_radio_readonly").text(this.get('value') ? this.get('value')[1] : "");
            }
        }
    });
};

5) Once files are created install the module.Once installation is complete you have done 80% of creating Radio button

6) Few more steps to get 100%

Create Selection field in your_python_file.py

IS_OBSTRUCTED = [ ('yes', 'YES'), ('no', 'NO'), ]

class your_module(osv.osv):
    _name = "your.module"  
    _description = "Your module Description"
    _columns = {
                'is_obstructed':fields.selection(IS_OBSTRUCTED,'Obstructed View?'),
    }
your_module()

Create filed view in XML

    <field name="is_obstructed" widget="radio"/>
2
Аватар
Відмінити
Аватар
saiharitha varada
Найкраща відповідь

Thank u its working

0
Аватар
Відмінити
Аватар
faizan
Автор Найкраща відповідь

i got it.. when i download the new version 8 from nightly.openerp.com/trunk/nightly/src/

and change the view file code to <field name="syllabus" widget="radio"/>

then radio btn appears..

thanks for your answers

0
Аватар
Відмінити
Francesco OpenCode

Please, go to the first answer and set it as correct (click on grey circle that become green). Thanks.

Umashankar Subramani

How to assign a value for widget= radio using xml

Аватар
George
Найкраща відповідь

It is possible follow this steps and achieve it.

  1. Create file structure given below Create flolder and name web_widget_radio __init__.py __openerp__.py static/src/js/widget_radio.js static/src/xml/widget_radio.xml

  2. Add these two lines in _openerp_.py 'js': ['static/src/js/widget_radio.js'], 'qweb': ['static/src/xml/widget_radio.xml'], Make _init_.py empty file

  3. Add following code in static/src/xml/widget_radio.xml <templates id="template" xml:space="preserve"> <t t-name="FieldRadio"> <t t-if="widget.options.horizontal"> <t t-set="width" t-value="Math.floor(100 / widget.selection.length)"/> <t t-if="!widget.options.no_radiolabel"> <t t-foreach="widget.selection" t-as="selection"> <label t-att-for="widget.uniqueId + '_' + selection[0]" t-att-style="'width: ' + width + '%;'"><t t-esc="selection[1]"/></label> </t>
    </t> <t t-foreach="widget.selection" t-as="selection">

    <input type="radio" t-att-name="widget.uniqueId" t-att-id="widget.uniqueId + '_' + selection[0]" t-att-value="selection[0]"/>
    </t> </t> <t t-if="!widget.options.horizontal"> <html> <t t-foreach="widget.selection" t-as="selection"> <input type="radio" t-att-id="widget.uniqueId + '_' + selection[0]" t-att-name="widget.uniqueId" t-att-value="selection[0]"/><label t-if="!widget.options.no_radiolabel" t-att-for="widget.uniqueId + '_' + selection[0]"><t t-esc="selection[1]"/></label> </t> </html>

            </t>
        </span>
        <span t-if="widget.get('effective_readonly')" class="oe_radio_readonly"><t t-esc="widget.get('value')[1]"/></span>
    </span>
    

    </t> </templates>

  4. Add following script in static/src/js/widget_radio.js openerp.web_widget_radio = function (instance) { instance.web.form.widgets.add('radio', 'instance.web_widget_radio.FieldRadio'); instance.web_widget_radio.FieldRadio = instance.web.form.AbstractField.extend(instance.web.form.ReinitializeFieldMixin, { template: 'FieldRadio', events: { 'click input': 'click_change_value' }, init: function(field_manager, node) { /* Radio button widget: Attributes options: * - "horizontal" to display in column * - "no_radiolabel" don't display text values / this._super(field_manager, node); this.selection = _.clone(this.field.selection) || []; this.domain = false; }, initialize_content: function () { this.uniqueId = _.uniqueId("radio"); this.on("change:effective_readonly", this, this.render_value); this.field_manager.on("view_content_has_changed", this, this.get_selection); this.get_selection(); }, click_change_value: function (event) { var val = $(event.target).val(); val = this.field.type == "selection" ? val : +val; if (val == this.get_value()) { this.set_value(false); } else { this.set_value(val); } }, /* Get the selection and render it * selection: [[identifier, value_to_display], ...] * For selection fields: this is directly given by this.field.selection * For many2one fields: perform a search on the relation of the many2one field */ get_selection: function() { var self = this; var selection = []; var def = $.Deferred(); if (self.field.type == "many2one") { var domain = instance.web.pyeval.eval('domain', this.build_domain()) || []; if (! _.isEqual(self.domain, domain)) { self.domain = domain; var ds = new instance.web.DataSetStatic(self, self.field.relation, self.build_context()); ds.call('search', [self.domain]) .then(function (records) { ds.name_get(records).then(function (records) { selection = records; def.resolve(); }); }); } else { selection = self.selection; def.resolve(); } } else if (self.field.type == "selection") { selection = self.field.selection || []; def.resolve(); } return def.then(function () { if (! _.isEqual(selection, self.selection)) { self.selection = _.clone(selection); self.renderElement(); self.render_value(); } }); }, set_value: function (value_) { if (value_) { if (this.field.type == "selection") { value_ = _.find(this.field.selection, function (sel) { return sel[0] == value_;}); } else if (!this.selection.length) { this.selection = [value_]; } } this._super(value_); }, get_value: function () { var value = this.get('value'); return value instanceof Array ? value[0] : value; }, render_value: function () { var self = this; this.$el.toggleClass("oe_readonly", this.get('effective_readonly')); this.$("input:checked").prop("checked", false); if (this.get_value()) { this.$("input").filter(function () {return this.value == self.get_value();}).prop("checked", true); this.$(".oe_radio_readonly").text(this.get('value') ? this.get('value')[1] : ""); } } }); }; Finally save all files and restart server and install this module once get installed

    1. How to use it in your view Create module and open your ______________.py file Create selection field IS_OBSTRUCTED = [ ('yes', 'YES'), ('no', 'NO'), ]

Finally OpenERP 7.0 allows you to create radio button

0
Аватар
Відмінити
Enjoying the discussion? Don't just read, join in!

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

Реєстрація
Спільнота
  • Навчальний посібник
  • Документація
  • Форум
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