Overslaan naar inhoud
Odoo Menu
  • Aanmelden
  • Probeer het gratis
  • Apps
    Financiën
    • Boekhouding
    • Facturatie
    • Onkosten
    • Spreadsheet (BI)
    • Documenten
    • Ondertekenen
    Verkoop
    • CRM
    • Verkoop
    • Kassasysteem winkel
    • Kassasysteem Restaurant
    • Abonnementen
    • Verhuur
    Websites
    • Websitebouwer
    • E-commerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Bevoorradingsketen
    • Voorraad
    • Productie
    • PLM
    • Inkoop
    • Onderhoud
    • Kwaliteit
    Personeelsbeheer
    • Werknemers
    • Werving & Selectie
    • Verlof
    • Evaluaties
    • Aanbevelingen
    • Wagenpark
    Marketing
    • Sociale media-marketing
    • E-mailmarketing
    • Sms-marketing
    • Evenementen
    • Marketingautomatisering
    • Enquêtes
    Diensten
    • Project
    • Urenstaten
    • Buitendienst
    • Helpdesk
    • Planning
    • Afspraken
    Productiviteit
    • Chat
    • Goedkeuringen
    • IoT
    • VoIP
    • Kennis
    • WhatsApp
    Apps van derden Odoo Studio Odoo Cloud Platform
  • Bedrijfstakken
    Detailhandel
    • Boekhandel
    • kledingwinkel
    • Meubelzaak
    • Supermarkt
    • Bouwmarkt
    • Speelgoedwinkel
    Food & Hospitality
    • Bar en Pub
    • Restaurant
    • Fastfood
    • Gastenverblijf
    • Drankenhandelaar
    • Hotel
    Vastgoed
    • Makelaarskantoor
    • Architectenbureau
    • Bouw
    • Vastgoedbeheer
    • Tuinieren
    • Vereniging van eigenaren
    Consulting
    • Accountantskantoor
    • Odoo Partner
    • Marketingbureau
    • Advocatenkantoor
    • Talentenwerving
    • Audit & Certificering
    Productie
    • Textiel
    • Metaal
    • Meubels
    • Eten
    • Brewery
    • Relatiegeschenken
    Gezondheid & Fitness
    • Sportclub
    • Opticien
    • Fitnesscentrum
    • Wellness-medewerkers
    • Apotheek
    • Kapper
    Trades
    • Klusjesman
    • IT-hardware & support
    • Zonne-energiesystemen
    • Schoenmaker
    • Schoonmaakdiensten
    • HVAC-diensten
    Andere
    • Non-profitorganisatie
    • Milieuagentschap
    • Verhuur van Billboards
    • Fotograaf
    • Fietsleasing
    • Softwareverkoper
    Browse all Industries
  • Community
    Leren
    • Tutorials
    • Documentatie
    • Certificeringen
    • Training
    • Blog
    • Podcast
    Versterk het onderwijs
    • Onderwijs- programma
    • Scale Up! Business Game
    • Bezoek Odoo
    Download de Software
    • Downloaden
    • Vergelijk edities
    • Releases
    Werk samen
    • Github
    • Forum
    • Evenementen
    • Vertalingen
    • Word een Partner
    • Services for Partners
    • Registreer je accountantskantoor
    Diensten
    • Vind een partner
    • Vind een boekhouder
    • Een adviseur ontmoeten
    • Implementatiediensten
    • Klantreferenties
    • Ondersteuning
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Vraag een demo aan
  • Prijzen
  • Help

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

  • CRM
  • e-Commerce
  • Boekhouding
  • Voorraad
  • PoS
  • Project
  • MRP
All apps
Je moet geregistreerd zijn om te kunnen communiceren met de community.
Alle posts Personen Badges
Labels (Bekijk alle)
odoo accounting v14 pos v15
Over dit forum
Je moet geregistreerd zijn om te kunnen communiceren met de community.
Alle posts Personen Badges
Labels (Bekijk alle)
odoo accounting v14 pos v15
Over dit forum
Help

How to add radio button widget

Inschrijven

Ontvang een bericht wanneer er activiteit is op deze post

Deze vraag is gerapporteerd
10 Antwoorden
67643 Weergaven
Avatar
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
Avatar
Annuleer
Sehrish

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

Avatar
Serpent Consulting Services Pvt. Ltd.
Beste antwoord

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
Avatar
Annuleer
Avatar
joseph d'souza
Beste antwoord

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
Avatar
Annuleer
Mohammad Alhashash

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

Avatar
George
Beste antwoord

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
Avatar
Annuleer
Avatar
saiharitha varada
Beste antwoord

Thank u its working

0
Avatar
Annuleer
Avatar
faizan
Auteur Beste antwoord

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
Avatar
Annuleer
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

Avatar
George
Beste antwoord

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
Avatar
Annuleer
Geniet je van het gesprek? Blijf niet alleen lezen, doe ook mee!

Maak vandaag nog een account aan om te profiteren van exclusieve functies en deel uit te maken van onze geweldige community!

Aanmelden
Community
  • Tutorials
  • Documentatie
  • Forum
Open Source
  • Downloaden
  • Github
  • Runbot
  • Vertalingen
Diensten
  • Odoo.sh Hosting
  • Ondersteuning
  • Upgrade
  • Gepersonaliseerde ontwikkelingen
  • Onderwijs
  • Vind een boekhouder
  • Vind een partner
  • Word een Partner
Over ons
  • Ons bedrijf
  • Merkelementen
  • Neem contact met ons op
  • Vacatures
  • Evenementen
  • Podcast
  • Blog
  • Klanten
  • Juridisch • Privacy
  • Beveiliging
الْعَرَبيّة 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 is een suite van open source zakelijke apps die aan al je bedrijfsbehoeften voldoet: CRM, E-commerce, boekhouding, inventaris, kassasysteem, projectbeheer, enz.

Odoo's unieke waardepropositie is om tegelijkertijd zeer gebruiksvriendelijk en volledig geïntegreerd te zijn.

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