Odoo Help


is it possible to Make all fields read only except one ?

on 7/25/15, 2:29 AM 2,013 views

how to make  for one all fileds  should read only or hidden expect one field . that field should be writable.

how to achieve this ??


You could try to get your desired output by making few changes in fields_view_get().  (It is similar to a hack) 

 from lxml import etree
 from openerp.osv.orm import setup_modifiers
 class product_template(orm.Model):
    _inherit = "product.template"
    def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False):
           if context is None:
               context = {}
           res = super(product_template, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=submenu)
           if view_type == 'form' and self.pool.get('res.users').has_group(cr, uid, 'YOUR_GROUP_ID'):
               doc = etree.XML(res['arch'])
               method_nodes = doc.xpath("//field")
               for node in method_nodes:
                   node.set('readonly', "1")
                   if node.get('name', False) and node.get('name', False) not in ['name','image_medium']:  #Add fields to skip readonly
                       setup_modifiers(node, res['fields'][node.get('name', False)])
               res['arch'] = etree.tostring(doc)
           return res

You can check whether the user has access for a particular group by doing this self.pool.get('res.users').has_group(cr, uid, 'YOUR_GROUP_CHILD1_ID')

I have edited my code to help you in case of having different groups with different field edit access

Atchuthan - Technical Consultant, Sodexis Inc
on 7/28/15, 5:48 AM

Nice idea. .And By using this function is it possible to control one2many or many2many fields too ?

on 7/28/15, 5:53 AM

I didn't have an opportunity to check whether this works for one2many or many2many. I'll let you know if it works for these 2 fields.

Atchuthan - Technical Consultant, Sodexis Inc
on 7/28/15, 5:55 AM

getting KeyError: 'product.product'

on 7/28/15, 7:11 AM

then add product module as a dependent module in your __openerp__.py file

Atchuthan - Technical Consultant, Sodexis Inc
on 7/28/15, 7:38 AM

Thanks it works and it throws NameError: global name 'etree' is not defined error

on 7/28/15, 7:50 AM

add this import statement: from lxml import etree

Atchuthan - Technical Consultant, Sodexis Inc
on 7/28/15, 8:00 AM

You rocks it works. . product.product did not worked for me. so i used product.template. What about security ? is it a just view modification ?

on 7/28/15, 8:15 AM

Yes, you need to use product.template for v8 and you need to create security.xml file with security records in it and add it to __openerp__.py

Atchuthan - Technical Consultant, Sodexis Inc
on 7/28/15, 8:23 AM

It it possible to make UI for this instead hard coding groups and field name. ?

on 7/29/15, 5:09 AM
Ivan Elizaryev
On 7/30/15, 12:27 AM

You can make whole model readonly and add a button "Edit FIELD", which would launch wizard to modify field you need to be writable. That wizard will update a record as SUPERUSER_ID 

Thanks Ivan, I want to make multiple groups. each groups has write access to specific fields only and other fields should be readonly. Thats why i asked how to make write access to specific fields only and other fields readonly. is it possible make a fine access control like ACL or Record Rules. so it can be applied to any model.

on 7/30/15, 1:05 AM
Drees Far
On 7/25/15, 4:22 AM

As far as i m concerned, either in front of every field you make readonly=True for those you need to make readonly and those you need them writable, dont put anything or you can make a function that transform your fields either readonly or writable.


HI , Can you tell how to make a function that transform fields either readonly or writable.

on 7/27/15, 1:15 AM
Ahmed M.Elmubarak
On 7/26/15, 3:31 AM


If you'd like to add a readonly attribute to specific group you can inherit that view, 
kindly check this , also you can give a group a read access right . BTW the question is not clear also the title is ambiguous.

Regards .... 

Since the question not clear for you . let me explain. lets take products. i want to make a group that is allowed only edit the title of the product. other than title all fields should be read only. hope you can help me.

on 7/27/15, 1:06 AM

So I think the first link is helpful, You'll need to inherit the product's view then specify the groups_id the change the attribute of the field that you want to change ...

Ahmed M.Elmubarak
on 7/27/15, 3:15 AM

Sorry i cant get you. . how it will make only one field writable. because . odoo applies Access rights for all fields (whole model ). if you can please explain me.

on 7/27/15, 5:52 AM
On 7/25/15, 5:09 AM

Thanks for your tip. @ Dress Far. readonly makes a field read  only to all groups. i need it for specific group only.

can you give example to make a function that transform fields either readonly or writable.

About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.


Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now

Question tools

2 follower(s)


Asked: 7/25/15, 2:29 AM
Seen: 2013 times
Last updated: 7/30/15, 12:27 AM