'set default value for a many2one field
when the user set nom_rubrique that come the value of many2one filled will be set by default
class A(models.Model):
rubrique_id = fields.Many2one('risques.rubrique',
string='Rubrique',
default=_default_rubrique,
index=True,
track_visibility='onchange',
change_default=True)
class B(models.Model):
critere_ids = fields.One2many('risques.critere','rubrique_id',required=True, string="Critére d'évaluation")
Solution 1:[1]
It seems syntax error in your code, try below solution:
Also parent_id field does not exits in your reference risques.rubrique model
class critere(models.Model):
_name = 'risques.critere'
_rec_name = 'nom_critere'
def _default_rubrique(self):
#here you did mistake , your search method syntex was wrong
#also it is better to use limit instead of [0] it may raise
#error if your search will return empty list
return self.env['risques.rubrique'].search([('parent_id', '=', False)], limit=1).id
nom_critere = fields.Char(string="Nom du Critere")
rubrique_id = fields.Many2one('risques.rubrique',
string='Rubrique',
default=_default_rubrique,
index=True,
track_visibility='onchange',
change_default=True)
class rubrique(models.Model):
_name = 'risques.rubrique'
_rec_name = 'nom_rubrique'
nom_rubrique = fields.Char(string="Rubrique")
critere_ids = fields.One2many('risques.critere', 'rubrique_id', required=True, string="Critére d'évaluation")
Solution 2:[2]
use lambda for set default value:
type = fields.Many2one('your.model',"String to display", default=lambda self: self.env['your.model'].search([('name','=','value you need to set as default')]))
Its simple.
Solution 3:[3]
The answer from Ridma Gimhani is almost correct. Since I can't edit his answer, I will edit his answer here
type = fields.Many2one('your.model',"String to display",
default=lambda self:
self.env['your.model']
.search([], limit=1))
We don't need to provide some search expression and the important thing we need to limit the result, if not, we will get an error
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | marc_s |
| Solution 2 | Ridma Gimhani |
| Solution 3 | NM Naufaldo |
