Odoo Help


Why _defaults is not working in model?

Tofiq Ahamad
on 3/7/13, 9:14 AM 1,580 views

the code i have written in the model is as follows...

from osv import osv
from osv import fields
class krunk_test(osv.osv):
    _name = 'krunk.test'

    _defaults = {
            'active': lambda *a: 1, # ideas are active by default
            'state':'draft', # ideas are in draft state by default

    _columns = {
            'name': fields.char("Title", size=64, required=True, translate=True),
            'state': fields.selection([('draft','Draft'),('confirmed','confirmed')],"State", required=True, readonly=True),

    #Description is readonly  whn not draft!

            'description':fields.text('Description', readonly=True, states={'draft':[('readonly', False)]}),
            'active': fields.boolean('Active'),
            'invent_date': fields.date('Invent date')

when I save the form it require "state" value. i have defined the value for "state" in _defaults. can anyone please tell me what's happening here? Thank you.


Nicolas Bessi

--Nicolas Bessi--
| 5 7 8
Lausanne, Switzerland
--Nicolas Bessi--
Nicolas Bessi
On 3/7/13, 9:55 AM


It is just a supposition, but maybe your field state is in your form view with a classical widget. As your fields is readonly when draft it may cause your trouble. Just try to remove states={'draft':[('readonly', False)] and tell me if it works.

Else some other points:

active statement in meaningless a record is active by default.

By convention _defaults is defined after _columns

Your _defaults seems to be correct it should work.

from openerp.osv import orm, fields

class KrunkTest(orm.Model): 

    _name = 'krunk.test'

    _columns = {'name': fields.char("Title", size=64, required=True, translate=True),
                'state': fields.selection([('draft', 'Draft'), ('confirmed', 'confirmed')],
                                          "State", required=True, readonly=True),

                'description': fields.text('Description', readonly=True, 
                                           states={'draft':[('readonly', False)]}),
                'active': fields.boolean('Active'),
                'invent_date': fields.date('Invent date')}

    _defaults = {'state': 'draft'} # ideas are in draft state by default

I can confirm that _default values only work if the related field is not readonly!

Andreas Brueckl
on 3/7/13, 10:09 AM

Cool, so do not forget to flag the answer as correct ;)

Camptocamp SA
on 3/7/13, 10:12 AM

If I want to accept it says that I cannot accept before March 14th :-). I think the original poster has to accept it

Andreas Brueckl
on 3/7/13, 10:15 AM
Tofiq Ahamad
On 3/7/13, 12:25 PM

i have removed the code states={'draft':[('readonly', False)] and now it's working i restarted the server and it works. but still not getting states={'draft':[('readonly', False)] what it is doing here?

The field "state" MUST NOT be readonly

Andreas Brueckl
on 3/7/13, 12:31 PM

'state': fields.selection([('draft','Draft'),('confirmed','confirmed')],"State", required=True),

AJ Schrafel Paper Corp
on 3/7/13, 1:44 PM

Andreas Brueck...._default values work either it is readonly or not !!

Tofiq Ahamad
on 3/8/13, 1:43 AM

You are making the entire column in the database read only, you need to make the field that is displayed to the user in the XML conditionally read only. You cannot define the field 'state' as read only when you declare it, that makes its it a read only field in the database, that nothing can change. You want to add your condition in the XML file that makes your field 'state' read only or not depending on other conditions.

AJ Schrafel Paper Corp
on 3/8/13, 10:57 AM

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

0 follower(s)


Asked: 3/7/13, 9:14 AM
Seen: 1580 times
Last updated: 5/16/16, 7:36 PM